我已经阅读了React中的嵌套组件。
我尝试使用此示例,并注意到每次更新父组件(待办事项列表)的状态。 DOM树重新渲染整体,而不是添加新的。
我的问题是:这是我们应该避免的反模式吗?
const TodoList = ({ todos, onTodoClick }) => {
const Todo = ({ completed, text, onClick }) => {
return (
<li onClick={onClick} style={{ textDecoration: completed ? 'line-through' : 'none' }}>
{text}
</li>
);
};
return todos.map(todo => <Todo key={todo.id} {...todo} onClick={() => onTodoClick(todo.id)} />);
};
这是我的测试
最佳答案
问题是,当您两次调用TodoList
时,您将获得Todo
的两个不同的封闭版本,这意味着React将认为您正在返回不同的组件,因为对构造函数的引用不相等:
function TodoList() {
return function Todo() { }
}
console.log(TodoList() === TodoList()); // false
将Todo移出TodoList绝对是性能明智的选择,因为React可以更好地协调,但是您失去了闭包的好处。因为您在这里没有关闭任何内容,所以我将其移到外面,但这就是优先选择的问题。