当使用 React 的 use state hook 使用它的 prev (或初始)值设置状态时抛出错误 Type Error 0 is not a function
When setting state with React's use state hook using it's prev (or initial) value throws an error Type Error 0 is not a function
我使用的是非常基本的提供商设置。我确定我的组件包含在提供程序中,并且应该将值传递给子组件。
const { totalData } = useContext(Context);
const [setTotal] = totalData;
我在这里提取了一个设置方法来设置所选项目的总成本。在我的提供商方面
const [total, setTotal] = useState(0);
我就是这样公开这个状态的
<Context.Provider
value={{
totalData: [total, setTotal],
}}>
{props.children}
</Context.Provider>
在这种情况下,当按下按钮时,React Native TouchableOpacity 我正在像这样设置状态;
setTotal(prev => checked ? prev + item.total_cost : prev - item.total_cost)
非常感谢任何关于如何发生这种情况的想法。
谢谢!!
您正在使用数组来存储您的值和 setter 函数,您将 total
设置为第一个值(索引 0
)并将 setTotal
设置为第二个值(索引 1
)。
问题是当你写 const [setTotal] = totalData;
时,你实际上是在获取 totalData
数组中的第一个值(即 total
)并将其重命名为 setTotal
.
所以现在您尝试调用 setTotal()
,但您实际上是在编写 total()
,这给了您错误。
解法:
将这些值作为键存储在对象中会是更好的开发人员体验,这样您就可以按照自己的方式对它们进行解构。
更改您的上下文提供程序:
<Context.Provider value={{ totalData: { total, setTotal } }}>
{props.children}
</Context.Provider>
然后像这样使用它:
const { totalData } = useContext(Context);
const { setTotal } = totalData;
注:
如果你真的想像原来那样继续使用数组,那么你可以像这样解构它:
const [_, setTotal] = totalData;
// Or
const setTotal = totalData[1];
这样您就可以获取数组中的第二项(set 函数),并简单地忽略第一个 (total
) 值。
我使用的是非常基本的提供商设置。我确定我的组件包含在提供程序中,并且应该将值传递给子组件。
const { totalData } = useContext(Context);
const [setTotal] = totalData;
我在这里提取了一个设置方法来设置所选项目的总成本。在我的提供商方面
const [total, setTotal] = useState(0);
我就是这样公开这个状态的
<Context.Provider
value={{
totalData: [total, setTotal],
}}>
{props.children}
</Context.Provider>
在这种情况下,当按下按钮时,React Native TouchableOpacity 我正在像这样设置状态;
setTotal(prev => checked ? prev + item.total_cost : prev - item.total_cost)
非常感谢任何关于如何发生这种情况的想法。
谢谢!!
您正在使用数组来存储您的值和 setter 函数,您将 total
设置为第一个值(索引 0
)并将 setTotal
设置为第二个值(索引 1
)。
问题是当你写 const [setTotal] = totalData;
时,你实际上是在获取 totalData
数组中的第一个值(即 total
)并将其重命名为 setTotal
.
所以现在您尝试调用 setTotal()
,但您实际上是在编写 total()
,这给了您错误。
解法:
将这些值作为键存储在对象中会是更好的开发人员体验,这样您就可以按照自己的方式对它们进行解构。
更改您的上下文提供程序:
<Context.Provider value={{ totalData: { total, setTotal } }}>
{props.children}
</Context.Provider>
然后像这样使用它:
const { totalData } = useContext(Context);
const { setTotal } = totalData;
注:
如果你真的想像原来那样继续使用数组,那么你可以像这样解构它:
const [_, setTotal] = totalData;
// Or
const setTotal = totalData[1];
这样您就可以获取数组中的第二项(set 函数),并简单地忽略第一个 (total
) 值。