React Context,如何更新一个分支中的上下文,以在另一个分支中使用

React Context, how to update context in one branch, to use in another branch

我可以使用 React 上下文 API 来管理 itemsInCart 的全局状态,允许 Product 更新上下文,并且只有 Nav 可以使用和重新-使成为。我不想在更改时重新呈现整个应用程序。

阅读 React 文档,我看到 Context 用户需要在提供者的下游,所以不确定这是否可行

代码(大大简化):

 function NavBar () {
    const [itemsInCart, setItemsInCart] = useState(0)

    return (
      <button onClick={openCart}>{itemsInCart}</button>
    )
  }

 function Product() {

    function incrementCart () {
      ???
    }

    return (
      <button onClick={() => incrementCart}>add product to cart</button>
    )
  }

  function App () {
    return (
      <NavBar/>
      <Router>
        <Product/>
      </Router>
    )
  }

您想使用 useContext 来完成。

A component calling useContext will always re-render when the context value changes. If re-rendering the component is expensive, you can optimize it by using memoization.

例如:

export const CartContext= React.createContext();

export const CartProvider = ({ children }) => {
  const [itemsInCart, setItemsInCart] = useState(null);

  return (
    <CartContext.Provider
      value={
        itemsInCart
      }
    >
      {children}
    </CartContext.Provider>
  );
};

然后在某些功能中,您可以使用它来更新购物车:

  const {itemsInCart, setItemsInCart} = useContext(CartContext);

最后,像这样更新 Provider 包装:

  function App () {
    return (
     <CartProvider>
      <NavBar/>
      <Router>
        <Product/>
      </Router>
     </CartProvider>
    )
  }