reactjs - 如何使用 useState 制作一个自定义钩子,如果状态改变,它可以更新多个元素?
问题描述
考虑以下示例:
const useCounter = () => {
const [count, setCount] = useState(0);
return [ count, setCount ];
};
const Shower = () => {
const [ value ] = useCounter();
console.log(value); //stays 0
return value;
}
const Setter = () => {
const [ value, setValue ] = useCounter();
console.log(value); //updates on click
return <button onClick={() => setValue(value+1)}>
Add
</button>
}
const App = () => {
return (
<div className="App">
<Setter />
<Shower />
</div>
);
}
我究竟做错了什么?我希望无论在何处使用以及使用多少次,它都会使用相同的状态,并且如果该状态更新,它应该更新我认为使用它的每个组件。
有什么建议么?
解决方案
useState
返回一对value
and setter
。一条数据和一种更改它的方法,但是每次实例化一个新组件时,也会创建这对的一个新实例。是在组件之间而不是本身之间hooks
共享 statetul 的好方法。调用 get 并创建一个实例。被调用并创建一个新实例。结构是一样的,不是。logic
state
Shower
useCounter
Setter
state
要在组件之间共享state
,请使用props
,redux
或Context API
推荐阅读
- mysql - MySQL触发器在删除后更新单行
- ios - 如何调用 CustomDelegate 函数 Textfield 采用新大小
- phpstorm - 备份所有 PhpStorm 设置
- python - 按Python排序顺序读取目录中的文件
- java - 如何实现依赖注入
- javascript - 我的放大图像下方并排有 2 个按钮
- oop - 将返回类型定义为方法的打包数字
- mongodb - 我们可以部署两个 mongodb 服务,在同一个集群中使用不同版本名称的 helm 包吗?
- python - 打开 JupyterNotebook 时没有 Conda 环境
- sql - 根据另一个表中的日期查找重复行