Reactjs TypeError:使用react上下文时对象不可编辑
我对react还不熟悉,我正试图做一个小项目,遇到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
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对象