报错setAnimals is not a function:检查Props仍未发现问题
排查"setAnimals is not a function"报错的几个方向
1. 修正use-local-storage-state的初始化写法
你当前的初始化代码是:
const [animals, setAnimals] = useLocalStorageState("animals", []);
但use-local-storage-state库的第二个参数要求是配置对象,而非直接传入默认值数组。正确的写法应该是:
const [animals, setAnimals] = useLocalStorageState("animals", { defaultValue: [] });
直接传数组会导致库无法正确返回函数类型的setAnimals,这是最可能的问题根源。
2. 确认所有AddAnimalForm的调用场景都传递了完整props
检查项目中所有渲染AddAnimalForm的位置:
- 是否存在直接引入
AddAnimalForm但未传入setAnimals和animals的场景? - 如果是在页面组件中嵌套使用
AddAnimalForm,要确保页面组件先接收App.js传递的animals和setAnimals,再向下传递。示例如下:
// 示例页面组件 export default function AnimalManagePage({ animals, setAnimals }) { return <AddAnimalForm animals={animals} setAnimals={setAnimals} />; }
3. 临时调试验证props类型
在AddAnimalForm的开头添加调试代码,确认接收的setAnimals类型:
export default function AddAnimalForm({setAnimals, animals}) { // 临时调试用,确认参数类型 console.log(typeof setAnimals, setAnimals); // ... 原有代码 }
如果输出结果不是function,说明props在传递链路中出现了丢失或类型异常,顺着渲染层级往上排查即可定位问题。
内容的提问来源于stack exchange,提问作者Pekz
相关产品推荐
相关产品推荐

