reactjs - 在 React 的子组件之间传递数据的最佳方式是什么?

标签 reactjs

我很好奇如果我们有多个嵌套组件并且我们将回调函数传递给最低级别的组件,然后从最低级别的事件渲染整个组件树,React应用程序的性能是否会受到影响- 触发此回调的级别组件。

如果是这样,解决这个问题的最佳方法是什么?

谢谢。

最佳答案

传递数据的方法有很多,但函数的方法却很少。

可以使用 Redux、useContext 或其他一些外部解决方案,例如 jotai .

其实官方推荐的方式是useContext: https://reactjs.org/docs/hooks-faq.html#how-to-avoid-passing-callbacks-down

const TodosDispatch = React.createContext(null);

function TodosApp() {
  // Note: `dispatch` won't change between re-renders
  const [todos, dispatch] = useReducer(todosReducer);

  return (
    <TodosDispatch.Provider value={dispatch}>
      <DeepTree todos={todos} />
    </TodosDispatch.Provider>
  );
}

function DeepChild(props) {
  // If we want to perform an action, we can get dispatch from context.
  const dispatch = useContext(TodosDispatch);

  function handleClick() {
    dispatch({ type: 'add', text: 'hello' });
  }

  return (
    <button onClick={handleClick}>Add todo</button>
  );
}

但坦率地说,将函数传递给多个组件也不是那么糟糕。

它使数据依赖性更加明确并提高了可测试性,尽管它确实有点冗长。做你认为更正确的事情。您稍后可以轻松地更改您的方法(在本例中)。

关于reactjs - 在 React 的子组件之间传递数据的最佳方式是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/72322957/

相关文章:

javascript - 如何为每两个元素映射以进行 react ?

javascript - 测试 redux 表单失败 - typeError formProps.handleSubmit 不是函数

javascript - 如何在 HOC 中访问包装组件的 div 元素

Javascript + react :- Unable to put the data in table and then render it

reactjs - 没有路线匹配位置

javascript - 将 Firebase FCM 添加到 reactjs 应用

javascript - 获取 JSON 并遍历 react-native 中的值

javascript - react CSSTransition 不动画

reactjs - React Window 如何传入组件?

javascript - 如何访问Javascript对象中的窗口变量?