为了账号安全,请及时绑定邮箱和手机立即绑定

将 const 值存储在变量和状态之间有区别吗?

将 const 值存储在变量和状态之间有区别吗?

ITMISS 2022-05-26 16:57:17
我注意到在 React 功能组件中实现看似相同的事情的几种方法。当您拥有本质上是仅在此组件内部需要的配置值时(只是一个常量值,从未传入或修改)您可以只使用常规值,const也可以将其存储在组件的状态中。标准变量:function Example1() {  const a = 1  return <div>{ a }</div>}存储状态:function Example2() {  const [a] = useState(1)  return <div>{ a }</div>}我得到的印象是,在幕后这将导致 Example1 在每次渲染上创建一个变量然后将其处理掉,而 Example2 将创建一次变量并保持它直到组件被卸载。那准确吗?就性能/良好实践而言,这些方法之一是否更可取?
查看完整描述

3 回答

?
芜湖不芜

TA贡献1796条经验 获得超7个赞

那准确吗?


是的,正如您所说,Example1在每个渲染上创建一个变量(在范围的末尾将其标记为“一次性” - 与 React 无关,但与 Javascript 无关),Example2创建一次变量并维护它直到组件被卸载(或此变量的状态通过setState) 更改。


就性能/良好实践而言,这些方法之一是否更可取?


作为一个好的做法 - Example1。


至于性能,应该是Example1。Example2运行useState并将值a与每个渲染上的先前状态进行比较,这比声明变量“昂贵得多”。


一个更好的例子是比较组件引用/记忆变量与变量(示例1):


function Example2() {

  const a = useRef(1);

  const b = useMemo(() => 1, []);

  return <div>{a.current} , {b}</div>

}

但答案几乎是一样的。


看到这样的代码表明 refa 可能会改变。的使用useMemo表示这b是一个“繁重的计算”变量,如果不是,它只是一个开销(与上面的解释相同)并且更好地使用示例 1。


查看完整回答
反对 回复 2022-05-26
?
尚方宝剑之说

TA贡献1788条经验 获得超4个赞

将此答案的重点放在何时使用什么上。

基本概念,

  • 如果您需要观察一个值并对其做出反应,将其存储在状态中是有意义的。

  • 如果您只想存储一个值以用于显示/计算目的,则使用 aconst/let更合适。


现在在你的第二个例子中

const [a] = useState(1)

这行代码是错误的。那是因为您正在添加观察者但不接受 setter 回调。


Example1 在每次渲染上创建一个变量

是的,这是正确的。在 Example2 中,它创建了 1 个变量,但是,React 中的状态是不可变的。这意味着,每次渲染,整个对象都会被复制到一个临时变量,销毁并再次创建。由于这个事实,建议不要将大型对象存储在状态中,因为它会对您的性能产生不利影响。


查看完整回答
反对 回复 2022-05-26
?
阿波罗的战车

TA贡献1862条经验 获得超6个赞

您的假设几乎是正确useState的,变量创建一次并在每次渲染时重复使用。

但是,主要区别在于修改使用 useState 创建的变量(通过其 setter 方法)会触发组件刷新。

如果你只需要在渲染之间保存一个值,你应该使用其他钩子,例如 useRef、useCallback 或 useMemo


查看完整回答
反对 回复 2022-05-26
  • 3 回答
  • 0 关注
  • 129 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号