Reactjs 更新道具是否应该重新渲染整个组件?
假设我有一个Reactjs 更新道具是否应该重新渲染整个组件?,reactjs,redux,Reactjs,Redux,假设我有一个CookingClass组件,它像这样初始化 let teachers = makeTeachers(["Amber", "Jason", "Lily"]) let students = makeStudents(["Hopper"]) <CookingClass teachers={teachers} students={students} /> let teachers=makeTeachers([“Amber”、“Jason”、“Lily”]) let
CookingClass
组件,它像这样初始化
let teachers = makeTeachers(["Amber", "Jason", "Lily"])
let students = makeStudents(["Hopper"])
<CookingClass
teachers={teachers}
students={students}
/>
let teachers=makeTeachers([“Amber”、“Jason”、“Lily”])
let students=makeStudents([“Hopper”])
其中一名教师退学:
let newTeachers = makeTeachers(["Amber", "Jason"])
<CookingClass
teachers={newTeachers}
/>
让newTeachers=makeTeachers([“Amber”,“Jason”])
它将使整个组件重新渲染。我不确定React是否只计算差异并有效地重新渲染它,或者我必须使用shouldComponentUpdate
自己处理它
更真实的例子可能是实现一个Google地图,其中有一百万个标记,您希望替换其中一个标记。您正在更改一个所谓的虚拟DOM节点。对于虚拟节点中的每次更改,都会调用
shouldComponentUpdate()
。如果您不自己实现它,它将始终返回true代码>
因此,如果您只想在特定情况下重新加载CookingClass
,那么您必须自己实现它
React的优点是,当本地DOM节点在虚拟DOM中发生更改时,它只会重新呈现这些节点。这是使反应如此迅速的“渲染”。您正在更改所谓的虚拟DOM节点。对于虚拟节点中的每次更改,都会调用shouldComponentUpdate()
。如果您不自己实现它,它将始终返回true代码>
因此,如果您只想在特定情况下重新加载CookingClass
,那么您必须自己实现它
React的优点是,当本地DOM节点在虚拟DOM中发生更改时,它只会重新呈现这些节点。这是使React如此快速的“呈现”。React使用非常高效的innerHTML
插入,并且仅针对应用程序VirtualDomainTree的新数据结构中的更改,完全处理realDOM呈现
shouldComponentUpdate()
控制是否应重新计算组件。例如,在渲染静态数据时,应该使用它。组件的输出不会更改,因此您可以返回false
,组件的第一个版本将永远使用;) realDOM呈现完全由React处理,使用非常高效的innerHTML
插入,并且仅用于应用程序VirtualDomTree的新数据结构的更改
shouldComponentUpdate()
控制是否应重新计算组件。例如,在渲染静态数据时,应该使用它。组件的输出不会更改,因此您可以返回false
,组件的第一个版本将永远使用;) 根据示例代码,该组件每次都将重新渲染
您应该使用()绑定将组件“连接”到存储
// ConnectedCookingClass.js
import { connect } from 'react-redux';
import CookingClass from './CookingClass';
const mapStateToProps = (state) => {
return {
teachers: state.teachers,
students: state.students
};
};
const ConnectedCookingClass = connect(mapStateToProps)(CookingClass);
export default ConnectedCookingClass;
然后在其他地方使用此组件,如下所示:
// OtherComponent.js
import ConnectedCookingClass from './ConnectedCookingClass';
const OtherComponent = React.createElement({
render() {
return (
<div>
<ConnectedCookingClass />
</div>
);
}
});
根据您的示例代码,该组件每次都将重新渲染
您应该使用()绑定将组件“连接”到存储
// ConnectedCookingClass.js
import { connect } from 'react-redux';
import CookingClass from './CookingClass';
const mapStateToProps = (state) => {
return {
teachers: state.teachers,
students: state.students
};
};
const ConnectedCookingClass = connect(mapStateToProps)(CookingClass);
export default ConnectedCookingClass;
然后在其他地方使用此组件,如下所示:
// OtherComponent.js
import ConnectedCookingClass from './ConnectedCookingClass';
const OtherComponent = React.createElement({
render() {
return (
<div>
<ConnectedCookingClass />
</div>
);
}
});
是的,您应该使用shouldComponentUpdate
来最小化重新渲染,并使用键
s来确保回收。请考虑使用react-redux。它为您解决了这个问题是的,您应该使用shouldComponentUpdate
来最小化重新渲染,并使用键
s来确保回收。请考虑使用react-redux。它为您解决了这个问题值得注意的是,当使用官方react-redux
绑定时,shouldComponentUpdate
被实现,并且并不总是返回true。值得注意的是,当使用官方react-redux
绑定时,shouldComponentUpdate
被实现,并且并不总是返回true。