javascript - 理解反应中的渲染
问题描述
我有多个问题,但由于它们都有一定的关联,我考虑在同一个线程中提问。
所以基本上我很难理解 React 渲染策略,所以我把它分解成更简单的术语,我正在寻求帮助来理解
问题一:
React 是否仅在状态更改时重新渲染?
问题2:
假设我有一个父有状态组件(类的东西扩展组件),同样在文件中,我们导入多个东西,比如
import Post from '../../components/Post/Post';
import FullPost from '../../components/FullPost/FullPost';
import NewPost from '../../components/NewPost/NewPost';
因此使它成为这样的回报
render () {
console.log(this.state.error)
let newPosts = <p style={{textAlign: 'center'}}> Sorry some error </p>
if (!this.state.error) {
newPosts = this.state.posts.map(el => {
return <Post key={el.id}
title={el.title}
author={el.author}
clicked={() =>this.postClicked(el.id)}/>
})
}
return (
<div className="Blog">
<header>
<nav>
<ul>
<li><a href="/">Home </a> </li>
<li><a href="/new-post">New Post</a></li>
</ul>
</nav>
</header>
<section className="Posts">
{newPosts}
</section>
<section>
<FullPost id={this.state.selectedPostId}/>
</section>
<section>
<NewPost />
</section>
</div>
那么当我们的状态发生变化时,它会渲染这里所有与状态相关的东西吗?喜欢里面的一切FullPost
还是newPosts
?
问题 3:
FullPost
(或newPosts
)恰好是上述帖子的孩子,现在如果在我们的完整帖子中我们的状态发生变化,它是否也会在我们的父类中呈现组件?
此外,如果您可以分享任何有关 React 状态更改/渲染的有趣信息,将会非常有帮助。
解决方案
- React 会在以下情况下重新渲染:
a) SetState 被调用,或者 state 的值改变
b) props 改变
c) forceUpdate() 被调用(这将被弃用) - FullPost 或 newPosts 中的所有内容?
不,当状态改变或重新渲染启动时,只会再次调用渲染函数,从 react 16.3 开始,getDerivedStateFromProps() 也会被调用。在状态/道具更新渲染之前调用的另一个函数是 shouldComponentUpdate() - 子组件的 state/props 的变化只会重新渲染子组件。但是如果一个父组件被重新渲染,它的子组件也被重新渲染。
推荐阅读
- three.js - Three.js Cubemap reflection shader rotation
- c++ - esp8266 通过 MQTT 发送大型 JSON 文档的问题
- python - loop to pass bulk values into python api request
- css - How to return a value with SASS depending on media query?
- javascript - 无法将对象保存在其键处于反应状态的状态
- assembly - BIOS Interrupt 0x10 Does Not Print/Display Anything
- reactjs - React - Manage Bootstrap Modals in components
- image - HOW TO STORE AN IMAGE UPLOADED BY THE USER FOR THE NEXT RUNTIME :android studio
- pandas - How to calculate Growth rate of a time series variable in python pandas
- c# - 如何将 int 2d 数组`int[,]` 转换为枚举 2d 数组`enum[,]`?