如果我有两个 Select 控件,其中一个依赖于另一个,因此如果我更改selectA值,则将根据它 Select selectB值:

...
const [values, setValues] = useState({ selectA: undefined, selectB: undefined });
const setSelectValue = (field, value) => {
  setValues((current) => {...current, [field]: value});
}

return (
  <>
    <Select
      name="selectA"
      value={values.selectA}
      onChange={(val) => setSelectValue('selectA', val)}
      ...
    />
    <Select
      name="selectB"
      value={values.selectB}
      onChange={(val) => setSelectValue('selectB', val)}
      ...
    />
  </>
);

就性能而言,最好是使用useEffect还是只更改selectA onChange方法的selectB值?

// Is it best to use useEffect
useEffect(() => {
  setSelectValue('selectB', values.selectA.potato);
}, [values.selectA]);

// ... or is it best to change it directly on onChange method?
<Select
  name="selectA"
  value={values.selectA}
  onChange={(val) => {
    setSelectValue('selectA', val);
    setSelectValue('selectB', val.potato);
  }}
  ...
/>

Does it matter at all? Is there any difference in terms of performance between both?

我知道,useEffect对于依赖于可以随时更新的数据的副作用很方便,但在这种情况下,当我在selectA上 Select 它时,我知道数据是正确的,它不能以任何其他方式更改,所以我想知道是否有必要用useEffect来观察那个值,而不是直接抓住它并设置它.

请记住,selectA.potato的值可以是任何类型的,但我认为它是一个对象.

推荐答案

是的,useEffect可能会更慢,但我不认为性能是这里的主要问题.

一般来说,官方建议不要过度使用useEffect英镑.如果你可以在没有它的情况下做一些事情,那么没有它可能会更好.

docs人开始:

效果是脱离react 范式的一个逃生舱.他们让你 "走出"Reaction并将您的组件与一些 外部系统,如无react 小部件、网络或浏览器DOM. 如果不涉及外部系统(例如,如果您希望 在某些props 或状态更改时更新组件的状态),您可以 应该不需要效果.移除不必要的效果将使您的 代码更容易遵循,运行速度更快,更不容易出错.

PS.上述引述中的"效果"指的是react 的具体定义.而不是"副作用"这一更广泛的编程概念.

Reactjs相关问答推荐

为什么VScode中的React应用程序无法识别文件夹 struct ?

使用Thattle和Use Effect setTimeout进行搜索有什么不同

在Reaction中更新状态时,我将变得未定义

Reaction Ploly:如何在多个子情节中共享zoom 状态

获取更改后的状态值

useEffect firebase 清理功能如何工作?

ctx.strokeStyle 在 canvas html 5 中不起作用

设置自定义形状的纹理

如何使用服务器中的数据自动填充表单字段?

Mui 在 TextField 标签上添加工具提示显示两个工具提示框

Spring Boot + React + MySQL应用的架构层面有哪些?

在react 中单击父级中的按钮时如何将数据从子级发送到父级?

我应该如何将字符串作为props 传递给 React 组件?

Redux Toolkit 配置,是否适用于全栈应用程序?

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

如何在props 更改时运行自定义挂钩?

getAttribute 函数并不总是检索属性值

react-query、react-hook-form 和表单验证

设置 Material UI 表格默认排序

多次响应获取发送请求