javascript - 在不触发重新渲染的情况下调用 setState

标签 javascript reactjs

我在 React 组件的 state 中存储了一个 UI 状态,比如说 this.state.receivedElements,它是一个数组。每当将元素推送到 receivedElements 时,我都希望重新呈现。我的问题是,我可以在数组变空时不触发渲染吗?
或者一般来说,我可以只调用一次 setState() 而不重新渲染,而在其他所有时间都重新渲染吗? (是否有任何选项、解决方法?)
我已经阅读了这个主题:https://github.com/facebook/react/issues/8598但没有找到任何东西。

最佳答案

I want re-renders whenever an element is pushed to receivedElements.

请注意,如果您使用以下方法,您不会重新渲染:

this.state.receivedElements.push(newElement); // WRONG

这违反了不能直接修改状态的限制。你需要:

this.setState(function(state) {
    return {receivedElements: state.receivedElements.concat([newElement])};
});

(它需要是回调版本,因为它依赖于当前状态来设置新状态。)

My question is, can I not trigger rendering when the array becomes empty ?

是的——在这种情况下不调用 setState

听起来好像 receivedElements 不应该是您状态的一部分,而是您单独管理的信息,并在 state 中适本地反射(reflect) .例如,您可能在组件本身上有 receivedElements,在 state 上有 displayedElements。然后:

this.receivedElements.push(newElement);
this.setState({displayedElements: this.receivedElements.slice()});

...和

// (...some operation that removes from `receivedElements`...), then:
if (this.receivedElements.length) {
    this.setState({displayedElements: this.receivedElements.slice()});
}

请注意,如果 this.receivedElements 为空,我们如何不调用 setState

关于javascript - 在不触发重新渲染的情况下调用 setState,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46768659/

相关文章:

javascript - 为什么在 setinterval react 中单击按钮后状态没有更新?

javascript - 如何将本地存储添加到我的React.js应用程序?

javascript - Date.toLocaleString() 的 Chrome 时区选项

javascript - 如何从 Javascript 中的自定义对象继承所有事件处理程序

javascript - 为什么此函数无法与 getElementsByTagName 以外的其他 "get element"方法一起使用?

node.js - 在 React 中使用 Infura API 和 ipfs-http-client 检索存储在 IPFS 上的 JPG 图像

javascript - 警告 : Cannot update a component while rendering a different component. ReactJS

javascript - nodejs vs javascript(两个不同的答案)

javascript - 将两个元素传递给函数

reactjs - 使用 React Router 6 将 props 从 outlet 传递给 parent