Reactjs TypeError:使用react上下文时对象不可编辑

Reactjs TypeError:使用react上下文时对象不可编辑,reactjs,react-context,Reactjs,React Context,我对react还不熟悉,我正试图做一个小项目,遇到react环境,因为我觉得传递道具很烦人。我遇到了useContext()hook的问题 我的上下文文件 export function BoardProvider(props){ const [ board, setBoard ] = useState({ id: null, name: null, longterm: false, code: null, teacher: null, per

我对react还不熟悉,我正试图做一个小项目,遇到react环境,因为我觉得传递道具很烦人。我遇到了
useContext()
hook的问题

我的上下文文件

export function BoardProvider(props){

const [ board, setBoard ] = useState({
    id: null,
    name:  null,
    longterm: false,
    code: null,
    teacher: null,
    periodStart: null,
    periodEnd: null,
    totalDuration: null,
    phases: [],
    students: []

})
return (
    <BoardContext.Provider value={[board, setBoard]}>
        {props.children}
    </BoardContext.Provider>
)
我导入的上下文如下所示:

import { BoardProvider } from '../../contexts/BoardContext'
错误表明对象不可编辑,所以我假设我在某处声明
board
是一个数组?如果是这样的话,具体在哪里,我该如何解决


感谢大家提前提供帮助:)

javascript中的Iterable对象和regular对象是两个不同的概念

根据MDN web文档,javascript中的常规对象是属性的集合,属性是名称(或键)和值之间的关联。值可以是函数或任何文字值

Iterable对象是包含
[Symbol.iterator]
函数的任何对象。我给你举一个Iterable对象的例子

让iterableObject={
0:‘a’,
1:‘b’,
2:‘c’,
长度:3,
[Symbol.iterator]:数组.prototype[Symbol.iterator]
};
for(iterableObject的var项){
控制台日志(项目);

}
我又落后于一些教程,发现了我的错误。我的.Provider标记在错误的文件中。它应该在路由器所在的应用程序中,在那里调用所有组件,以便它们都可以访问上下文

function RouterApp() {

    const [ board, setBoard ] = useState(null);

    const value = useMemo(() => ({ board, setBoard}), [ board, setBoard])

    return (
        <Router>
            <div className="App">
                <BoardContext.Provider value={value}>
                    <Switch>
                        <Route path="/" exact component={BoardName} />
                        <Route path="/createboard/:name" exact component={TimePeriod} />
                        <Route path="/createboard:name/phases" exact component={PhaseForm} />
                    </Switch>
                </BoardContext.Provider>

            </div>
        </Router>
    );
}

export default RouterApp;

函数RouterApp(){
const[board,setBoard]=使用状态(null);
const value=useMemo(()=>({board,setBoard}),[board,setBoard])
返回(
);
}
导出默认RouterApp;
这是我的路由器功能,我将上下文传递给BoardName、TimePeriod和PhaseForm的组件


感谢所有帮助我的人。

将值错误地传递给提供程序可能会导致此错误。检查支架和支架是否正确:

不正确:

<RegulatorContext.Provider value={{state, setState}}>
    <Regulator />
</RegulatorContext.Provider>
<RegulatorContext.Provider value={[state, setState]}>
    <Regulator />
</RegulatorContext.Provider>

正确:

<RegulatorContext.Provider value={{state, setState}}>
    <Regulator />
</RegulatorContext.Provider>
<RegulatorContext.Provider value={[state, setState]}>
    <Regulator />
</RegulatorContext.Provider>


有些东西你没有给我们展示,因为这段代码看起来不错,试着在沙盒中做一个例子,比如演示你如何使用
board
错误可能来自
board.map
或者某个错误,因为
board
是一个对象。不,我没有使用任何map方法。我想在BoardName中做的唯一一件事就是将表单中的数据存储到上下文中。我把我的整个项目放到()沙盒中,这样你们就可以看到我想做什么了。谢谢你们解决了那个错误。但现在我得到一个错误,说董事会是未定义的,好像董事会从上下文没有正确地保存到其他类的对象。知道为什么吗?查一下上下文。您的BoardContext必须具有空对象
export-const-BoardContext=React.createContext({})
打印时电路板保持未定义状态。抱歉!!!检查编辑的代码默认值必须是JSON对象