为了学习的目的,我试图通过从头开始实现它来分解通量模式的基础知识。我知道我可以使用类组件解决下面的问题,但为什么它可以与类组件一起使用setState({ ... }),而不可以与钩子的setValues功能一起使用?
正如您所猜测的,问题在于该setValues函数似乎没有触发新状态的重新渲染。我有一种感觉这与闭包有关,但我不太了解它们,所以我将不胜感激任何指导和帮助。
店铺
// store.js
import EventEmitter from "events";
class StoreClass extends EventEmitter {
constructor() {
super();
this.values = []
}
addNow() {
this.values.push(Date.now());
this.emit('change')
}
getAll() {
return this.values;
}
}
const store = new StoreClass();
export default store;
成分
// App.js
import store from './store';
function App() {
const [values, setValues] = useState([]);
const handleClick = () => {
store.addNow();
};
useEffect(() => {
const onChangeHandler = () => {
console.log("Change called");
setValues(() => store.getAll())
};
store.on('change', onChangeHandler);
return () => store.removeAllListeners('change')
}, [values]);
return (
<div>
<button onClick={handleClick}>Click to add</button>
<ul>
{values.map(val => <li key={val}>{val}</li>)}
</ul>
</div>
);
}
斯蒂芬大帝
ibeautiful
梵蒂冈之花
随时随地看视频慕课网APP
相关分类