簡體   English   中英

一個上下文消費者被渲染了多個孩子,或者一個不是函數的孩子

[英]A context consumer was rendered with multiple children, or a child that isn't a function

完整的錯誤說:

一個上下文消費者被渲染了多個孩子,或者一個不是函數的孩子。 上下文使用者期望一個作為函數的子項。 如果您確實傳遞了一個函數,請確保它周圍沒有尾隨或前導空格。

我在這里閱讀了幾個解決方案,但沒有一個對我有用。 這是我的代碼:

TransactionsContext.jsx

export const TransactionContext = React.createContext();

export const TransactionProvider = ({ children }) => {
    return (
        <TransactionContext.Provider value='test'>
            { children }
        </TransactionContext.Provider>
    );
}

主.jsx

import { TransactionContext } from './context/TransactionsContext';

ReactDOM.render(
  <TransactionContext>
    <App />
  </TransactionContext>,
  document.getElementById('root')
)

應用程序.jsx

const App = (props) => {
  return (
    <div className="min-h-screen">
      <div>
        <Navbar />
        <Welcome />
      </div>
      <Services />
      <Transactions />
      <Footer />
    </div>
  )
}

歡迎.jsx

const Welcome = () => {

const { value } = useContext(TransactionContext);
console.log(value);
...
}

在此處輸入圖像描述

先感謝您!

在 TransactionsContext.jsx 上發送對象而不是字符串

<TransactionContext.Provider value={{value: 'test'}}>

一旦創建了上下文,它就從上下文提供者開始。

替換提供者 main.jsx 的上下文

import { TransactionProvider } from './context/TransactionsContext';

ReactDOM.render(
  <TransactionProvider>
    <App />
  </TransactionProvider>,
  document.getElementById('root')
);

然后在 Welcome.jsx 上使用上下文

const Welcome = () => {
    const { value } = useContext(TransactionContext);
    console.log(value);
    // or
    // const tc = useContext(TransactionContext);
    // console.log(tc.value);
    ...
}

main.jsx中,您應該將App組件包裝在TransactionProvider中,而不是TransactionContext中:

import { TransactionProvider } from './context/TransactionsContext';

ReactDOM.render(
  <TransactionProvider>
    <App />
  </TransactionProvider>,
  document.getElementById('root')
)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM