我想要检测哪些参数props 在我的使用效果中发生了变化.我怎样才能做到这一点呢?我需要这样的东西:

const myComponent = () => {
   ...
   useEffect(() => {
      if (prop1 === isTheOneThatChangedAndCusedTheTrigger){
         doSomething(prop1);
      }else{
         doSomething(prop2);
      }
   },[prop1, prop2]);
};

export function myComponent;

推荐答案

虽然您可以使用类似usePrevious的内容来保留对特定状态包含的最后一个值的引用,然后将其与Effect挂钩中的状态中的当前值进行比较……

const usePrevious = (state) => {
  const ref = useRef();
  useEffect(() => {
    ref.current = state;
  }, [value]);
  return ref.current;
}
const myComponent = () => {
   const [prop1, setProp1] = useState();
   const prevProp1 = usePrevious(prop1);
   const [prop2, setProp2] = useState();
   const prevProp2 = usePrevious(prop2);

   useEffect(() => {
      if (prop1 !== prevProp1){
         doSomething(prop1);
      }
      // Both may have changed at the same time - so you might not want `else`
      if (prop2 !== prevProp2) {
         doSomething(prop2);
      }
   },[prop1, prop2]);
};

有点难看.考虑是否有更好的方法来组织您的代码,这样就不需要这样做了--比如使用单独的效果.

useEffect(() => {
  doSomething(prop1);
}, [prop1]);
useEffect(() => {
  doSomething(prop2);
}, [prop2]);

Reactjs相关问答推荐

无法从正在使用Reaction的Electron 商务store 项目中的购物车中删除项目

如何在单击行中的图标时避免选中ionic 复选框?

REACTION 18功能组件正在开发中的S

如何通过回调函数获取多个值?

Reaction Google Maps API无法获取标题

如何使用useState响应快速/顺序状态更新

REACTION-Easy-SORT返回.map错误

阻止组件更新的多分派Redux Thunk或setState是否有任何问题

状态更改时的rtk查询触发器

更改点几何体的坐标会将其隐藏

React 错误: 只能用作 元素的子元素,从不直接渲染.请将您的 包裹在

React Todo List 应用程序我在实现删除功能时遇到问题

从 MongoDB createAt 字段中分割精确时间

即使配置了 webpack.config.js,html-loader 也不起作用

条件渲染元素的测试不起作用

顶点图表甜甜圈项目边框半径

为什么此代码中的 useState 不更新(文本更新但 id 不更新)?

Storybook - 无法解析generated-stories-entry.cjs/字段browser不包含有效的别名配置

将 dict 值转换并插入到react 钩子的列表中

为什么 state redux-toolkit 是代理?