javascript - 在 React Context 中使用与状态无关的全局对象
问题描述
我希望有一个可用于我的应用程序的全局对象,我可以在任何地方检索值并在任何地方设置新值。目前,我只将 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 对象(而不是状态)并在任何地方更改值,我将如何处理这个问题?
解决方案
React 世界中的全局上下文概念是为了解决通过多个组件层传递 props 的问题而诞生的。在使用 React 时,我们希望在“数据源”发生变化时重新渲染。React 中数据绑定的一种方式使这个流程更易于编码、调试和维护。那么您存储全局对象的具体目的是什么,而当该对象发生更改时什么也没有发生?如果没有任何东西在它改变时重新渲染,那么它的主要用途是什么?
React 中的防止重新渲染有多种方式,如useEffect
或旧shouldComponentUpdate
方法。如果您的主要想法只是防止在某些非常特定的情况下重新渲染,我认为它们会有所帮助。
推荐阅读
- ios - ScrollView 缺少约束
- java - DAO 和实体关系
- reactjs - firebase 不会捕获错误
- python - 使用两个函数(Python)
- python - Python,如何以精度(uint8,uint16)将二维数组写入二进制文件?
- javascript - 如何将参数传递给 keydown 事件
- javascript - Angular Material Design Form Field如何使用拖放图标作为matPrefix
- selenium-chromedriver - Magento 2 MFTF 测试:Chrome 无法启动:异常退出
- microsoft-edge - 如何在 Microsoft Edge 官方版本中使用 TEdgeComponent
- wordpress - 根据城市可选择街道