javascript - React 反模式,在另一个组件的定义中定义了一个组件

标签 javascript reactjs anti-patterns

我已经阅读了 React 中的嵌套组件。

我尝试了这个例子并注意到每次我更新父组件 (todolist) 的状态。 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)} />);
};

这是我的测试 enter image description here

最佳答案

问题是,当你两次调用 TodoList 时,你会得到两个不同的关闭版本的 Todo,这意味着 React 会认为你正在返回不同的组件因为对构造函数的引用不相等:

 function TodoList() {
   return function Todo() { }
 }

 console.log(TodoList() === TodoList()); // false

Is that a bad practice?

将 Todo 移到 TodoList 之外绝对是性能明智的,因为 React 可以更好地协调,但是你失去了闭包的好处。由于您没有在这里关闭任何东西,我会把它移到外面,但这是一个偏好问题。

关于javascript - React 反模式,在另一个组件的定义中定义了一个组件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51696293/

相关文章:

javascript - 如何将 sharethis 按钮添加到我的 Flash 文件中?

javascript - 如何在 .submit() 之后重新加载页面

javascript - React componentdidmount 使用外部函数返回状态

python - python中的构造函数特化

javascript - 为什么 "element.innerHTML+="是错误代码?

javascript - Gatsby Develop 和 Build 给出不同的结果

javascript - 检测控件的 "Class"属性何时更改的任何事件

Javascript - 确保字符串字段包含某些字符和数字

reactjs - 如何在ReactJS中通过组件名称获取元素

angularjs - 何时在 angularjs 中使用嵌套 Controller 而不是服务?