javascript - 即使新值等于先前值,如何在每个 setMyState() 处触发 useEffect() Hook ?

标签 javascript reactjs react-hooks

我正在尝试实现一个逻辑,每次组件使用 setMyState(value) 时我都需要执行一个操作(我将状态的先前值记为 preValue) 使用 useEffect() Hook ,将 myState 作为依赖。

这在 value !== prevValue 时按我的意愿工作。但是,如果 value === prevValue,则不会触发 Hook ,这在优化方面是合乎逻辑的。但是在每次 setMyState(value) 调用时仍然触发 Hook 的正确方法是什么?这可能是一个设计缺陷,因为我是 React 的新手。

提前谢谢你。

最佳答案

useEffect 仅在新值与先前值不同时触发。 但是您可以使用此 hack 在每次值更改时触发 useEffect

const [state, setState] = useState({ name: "" });

useEffect(() => {
  console.log("called... " + state.name);
}, [state]);

const onValueChange = (e) => {
  setState({ name: e.target.value });
};

return (
  <div className="App">
    <h1>Car</h1>
    <select name="cars" id="cars" onClick={onValueChange}>
      <option value="volvo">Volvo</option>
      <option value="saab">Saab</option>
      <option value="mercedes">Mercedes</option>
      <option value="audi">Audi</option>
    </select>
  </div>);

sandbox

关于javascript - 即使新值等于先前值,如何在每个 setMyState() 处触发 useEffect() Hook ?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/68469120/

相关文章:

javascript - addEventListener 的 Onclick 事件不起作用

javascript - 表示 react-redux 连接组件的 UML 图

javascript - 为什么进度条总是显示100%?

javascript - react : Can I not pass a parameter into an action?

reactjs - 在 React 组件中结合 useState 钩子(Hook)

reactjs - React Hooks - 如何避免在每次渲染时重新声明函数

javascript - ajax - 验证数据库中是否已存在行

javascript - Angular ui-grid 渲染的回调函数

javascript - Google map 重绘时会触发什么事件?

reactjs - 使用 React Hooks 更改数组中的对象属性不会引起重新渲染