React子组件调用父传的setTodos提示不是函数,求问题原因
setTodos is not a function
问题原因
- 参数名大小写不匹配:父组件向Form子组件传递的属性名为
setTodos,但子组件解构props时写的是setToDos(字母d为大写,和传入的属性名不一致),导致子组件实际拿到的setToDos为undefined,调用时就会抛出「不是函数」的错误。 - 参数漏传:父组件没有给Form组件传递
setInputText属性,但子组件中直接解构并使用了该属性,后续调用setInputText时也会触发同类报错。 - 额外拼写错误:生成id时调用的
Math.randowm拼写有误,正确写法为Math.random,后续运行时也会触发报错。
修复方案
- 修改App组件中Form组件的传参逻辑,补上遗漏的
setInputText:
<Form inputText={inputText} setInputText={setInputText} todos={todos} setTodos={setTodos} />
- 修改Form子组件的props解构字段,把
setToDos改为和父组件传参一致的setTodos:
const Form = ({inputText, setInputText, todos, setTodos}) => { // 原有业务逻辑保持不变,调用更新函数时使用setTodos即可 }
- 修复id生成逻辑的拼写错误:把
Math.randowm()改为Math.random()。
内容的提问来源于stack exchange,提问作者phuc le
相关产品推荐
相关产品推荐

