usestate函数式更新_javascript – 从组件中的useState多次调用状态更新程序会导致多次重新呈现...

我第一次尝试React钩子,所有看起来都很好,直到我意识到当我获取数据并更新两个不同的状态变量(数据和加载标志)时,我的组件(数据表)呈现两次,即使两个调用状态更新程序正在发生在同一个函数中.这是我的api函数,它将两个变量都返回给我的组件.

const getData = url => {

const [data, setData] = useState(null);

const [loading, setLoading] = useState(true);

useEffect(async () => {

const test = await api.get('/people')

if(test.ok){

setLoading(false);

setData(test.data.results);

}

}, []);

return { data, loading };

};

在普通的类组件中,你只需要调用一次来更新可以是一个复杂对象的状态,但“钩子方式”似乎是将状态分成更小的单元,其副作用似乎是多个在单独更新时呈现.任何想法如何缓解这个?

解决方法:

您可以将加载状态和数据状态组合到一个状态对象中,然后您可以执行一个setState调用,并且只有一个渲染.

注意:与类组件中的setState不同,从useState返回的setState不会合并具有现有状态的对象,它会完全替换该对象.如果要进行合并,则需要读取先前的状态并自行将其与新值合并.请参阅docs.

在确定您遇到性能问题之前,我不会过分担心渲染渲染.渲染(在React上下文中)并将虚拟DOM更新提交到真实DOM是不同的事情.这里的渲染是指生成虚拟DOM,而不是更新浏览器DOM. React

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值