簡體   English   中英

在與 state 無關的 React 上下文中使用全局 object

[英]Using a global object in React Context that is not related to state

我希望有一個全局 object 可供我的應用程序使用,我可以在其中檢索任何地方的值,也可以在任何地方設置一個新值。 目前我只對與 state 相關的值使用 Context ,即當值更改時需要再次渲染。 例如:

import React from 'react';
const TokenContext = React.createContext({
    token: null,
    setToken: () => {}
});

export default TokenContext;

import React, { useState } from 'react';
import './App.css';
import Title from './Title';
import TokenContext from './TokenContext';

function App() {

  const [token, setToken] = useState(null);


  return(
    <TokenContext.Provider value={{ token, setToken }}>
      <Title />
    </TokenContext.Provider>
  );
}

export default App;

如果我只想在上下文(不是狀態)中存儲 JS object 並在任何地方更改值,我將如何處理?

React 世界中的全局上下文概念是為了解決通過多個組件層傳遞 props 的問題而誕生的。 在使用 React 時,我們希望在“數據源”發生變化時重新渲染。 React 中數據綁定的一種方式使這個流程更易於編碼、調試和維護。 那么,您存儲全局 object 的具體目的是什么,而當 object 發生變化時什么也沒發生? 如果沒有任何東西在它改變時重新渲染,那么它的主要用途是什么?

React 中的防止重新渲染有多種方法,例如useEffect或舊的shouldComponentUpdate方法。 如果您的主要想法只是防止在某些非常特定的情況下重新渲染,我認為它們會有所幫助。

將其用作 state 管理庫,如 Redux。

您有一個全局 object (存儲)並通過上下文查詢該值,但您還需要添加forceUpdate()因為變異 object 不會觸發渲染,因為它不是 React ZDB974238714CA8DE634A7CE1D08A 的一部分:

const globalObject = { counter: 0 };

const Context = React.createContext(globalObject);

const Consumer = () => {
  const [, render] = useReducer(p => !p, false);
  const store = useContext(Context);

  const onClick = () => {
    store.counter = store.counter + 1;
    render();
  };

  return (
    <>
      <button onClick={onClick}>Render</button>
      <div>{globalObject.counter}</div>
    </>
  );
};

const App = () => {
  return (
    <Context.Provider value={globalObject}>
      <Consumer />
    </Context.Provider>
  );
};

編輯迷人的湖-iyk04

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM