javascript - 反应 useContext setState 不是一个函数
问题描述
我正在开发一个反应应用程序,我需要在我的全局状态中保留一组名称,就像这个文件一样:
import React from "react";
import { useState } from "react";
const initialState = {
nameList: [],
test: 'hello'
}
export const Context = React.createContext()
const Data = ({ children }) => {
const [state, setState] = useState(initialState)
return(
<Context.Provider value={[state, setState]}>
{children}
</Context.Provider>
)
}
export default Data
但是,当我尝试将“nameList”设置为另一个文件中的新值时:
const [state, setState] = useContext(Context);
const [currName, setCurrName] = useState('');
const handleAddName = () => {
setState.nameList(prevState => [...prevState, currName])
}
我收到“setState.nameList 不是函数”错误,我找不到也无法理解原因,任何帮助将不胜感激
解决方案
您错误地更新了状态,以下是您的情况:
const handleAddName = () => {
setState(prevState => ({
...prevState,
nameList: [...prevState.nameList, currName]
}))
}
这将确保状态更新不变。
setState.nameList
是错误的,因为setState
它是一个函数而不是一个对象,它会神奇地拥有你的状态键。
推荐阅读
- javascript - 如何避免覆盖javascript中的列表元素?
- f# - fsharp lang 中是否有限制类型系统?
- highcharts - 如何创建 2 个分离的 xAxis 图表
- javascript - 在 SVG 元素中使用类似对象(节点列表)的数组 - d3 Java Script
- python-3.x - PRAW:如何持续检查新的 reddit 提交(并执行操作)
- python - 将视频转换为帧而不在本地保存帧的最快方法
- python - 如何更改未选中元素的样式?
- javascript - 获取文档的部分以匹配 HTML 模板
- c++ - 理解 GLM-openGL 中的相机翻译
- python - 从 pandas 表列自动生成语法