javascript - 创建一个可以从 React 中的任何地方访问的变量
问题描述
我正在尝试在 React 中创建暗模式。为此,我需要一个可以从组件树上的任何位置访问的“巨型变量”,如下所示:
let darkMode = false
当它被切换时,在一个选定的组件中,我将能够编写类似的东西:
<button>{darkMode ? "Light Mode" : "Dark Mode"}</button>
我试图用 MobX 来做,但没有用。它不会像在状态更改中那样重新渲染。我能做些什么?
解决方案
小心global variables
。实际上,考虑到 React 的流程,甚至很难实现这一点(也许使用window
对象?)。你想要的可以用Context API
. props
这是一种通过组件的解耦方式。通过使用 a 包装应用程序的最高级别,您Provider
可以从任何地方(在同一棵树内)访问它:
const {Provider, Consumer} = React.createContext()
const App = () =>{
<Provider value={{theme: 'dark'}}>
<MyComponents />
</Provider>
}
在这棵树的任何组件中:
const Component = () =>{
return(
<Consumer>
{context => console.log(context.theme) /*dark*/}
</Consumer>
)
}
还有其他选择,redux
但似乎对您的用例来说有点过头了。
推荐阅读
- android - 在调用另一个类的 ViewModel 中实现 Dagger
- spring-boot - Spring Boot:使用 Thymeleaf 从会话中删除属性
- python-3.x - Urllib.request.urlopen().read 不起作用
- twitter-bootstrap - 如何右对齐导航栏但不是一直向右
- python-3.x - from collections import Container 和 from collections.abc import Container 的区别
- java - 有没有办法根据用户的角色和@RolesAllowed 可以访问的所有球衣网址列表?
- javascript - Javascript 不能在 Heroku 上运行,但可以在本地运行,我该如何解决这个问题?
- python - 如何正确处理来自 json 响应的错误
- git - 我有一个“git serve”子命令,不知道它来自哪里
- c# - 如何在本地和远程计算机上使用 Windows 搜索服务?