javascript - ReactJS 重新渲染不适用于 CSS
问题描述
我想知道如果被调用,ReactJS 不会强制将 CSS 重新应用于子组件事件的原因是什么 componentDidUpdate()
。我做了一点演示,添加新盒子不会改变现有盒子的颜色,尽管数字会改变。
以及如何强制更新它。
谢谢
解决方案
ReactJS 背后的核心原则是只更新 DOM 中更改的对象。这种模块化为您提供了各种速度、简单性和抽象性优势——即使您的站点包含数千个组件。
在您的示例中,您向 DOM 添加了一个新框,并且没有更改任何其他框,ReactJS 在每个render()
.
所以你的问题的答案相对简单:如果你想重新渲染其他盒子,你需要以某种方式改变它们。否则 ReactJS 将无法理解其他框需要重新渲染。实现这一点的最简单方法是使用该key
属性,请参阅文档:
键帮助 React 识别哪些项目已更改、添加或删除。应为数组内的元素提供键,以使元素具有稳定的标识:
const numbers = [1, 2, 3, 4, 5];
const listItems = numbers.map((number) =>
<li key={number.toString()}>
{number}
</li>
);
现在,如果您在向 DOM 添加新项目时更改键,则将重新呈现对象,因为通过更改key
ReactJS 了解该对象需要重新呈现。您还可以更改其他属性以重新渲染对象,但更改key
是最直接的方法。
此外,您也可以调用forceUpdate()
,查看文档,但您仍然需要更改标记:
默认情况下,当您的组件的状态或道具发生变化时,您的组件将重新渲染。如果你的 render() 方法依赖于其他数据,你可以通过调用 forceUpdate() 告诉 React 组件需要重新渲染。
调用 forceUpdate() 将导致在组件上调用 render(),跳过 shouldComponentUpdate()。这将触发子组件的正常生命周期方法,包括每个子组件的 shouldComponentUpdate() 方法。如果标记发生变化,React 仍然只会更新 DOM。
通常你应该尽量避免使用 forceUpdate() 并且只在 render() 中读取 this.props 和 this.state。
推荐阅读
- javascript - 如何在 Jest 中测试默认导出的 javascript 模块?
- rdf - RDF 中的度量单位本体有多实用?
- typescript - 打字稿 | 键入动态类
- autoit - AutoIt - DllCall - 我的 dll 调用不返回值
- wordpress - 谷歌搜索控制台:缺少“项目”字段
- java - Spring MVC:一种形式的多个标签
- java - 已添加@Tansactional,但在显式抛出检查异常时仍未发生回滚
- shell - Cron 作业无法与 postgresql 数据库建立连接
- outlook - 我们在您的帐户中找到的产品不能用于在共享计算机场景、Office 365、Windows 虚拟桌面中激活 Office
- ios - PowerBI 报告加载在 Xamarin.ios 上失败,并显示“此内容不可用”消息