当前位置: 首页 > 知识库问答 >
问题:

如何在Gatsby中添加本地存储以保持暗模式主题

郭永怡
2023-03-14

我已经尝试了一切方法来添加本地存储来持久化主题。关于如何使用现有代码实现的任何想法?第一次渲染时,我得到了冲突主题的混合。我尝试在设置主题时实现本地存储。

const setTheme = type => {
  localStorage.setItem("theme", setState({ ...state, theme: type === "dark" ? theme.light : theme.dark })
}
    
const initState = {
  theme: localStorage.getItem("theme"),
  setTheme: setTheme,
}
    
const [state, setState] = useState(initState)

他们的提供者。js

    
export const ThemeContext = React.createContext({
      theme: {
      
      },
      setTheme: () => {},
    })
    
export const ThemeContextProvider = props => {
      const theme = {
        light: {
          
        },
        dark: {
         
        },
      }
    
      const setTheme = type => {
        setState({ ...state, theme: type === "dark" ? theme.light : theme.dark })
      }
    
      const initState = {
        theme: theme.light,
        setTheme: setTheme,
      }
    
      const [state, setState] = useState(initState)
    
      return (
        <ThemeContext.Provider value={state}>
          {props.children}
        </ThemeContext.Provider>
      )
    } 

共有1个答案

宋景福
2023-03-14

这一行对我来说没有意义:

const setTheme = type => {
  localStorage.setItem("theme", setState({ ...state, theme: type === "dark" ? theme.light : theme.dark })
}

您想在localstore中设置一个项目,但却在setItem函数中设置React状态?

有两点需要注意:

  • 不要在localStorage中设置React状态。设置项功能

这是正确的:

const setTheme = type => {
  localStorage.setItem("theme", state.theme }); // only save the theme value "dark" or "light" as a string
}

您需要触发设置状态根据在localStore或在初始状态中的值。为此使用usimplified。这个答案告诉你怎么做。

 类似资料:
  • 从Android10开始,你可以在黑暗模式和默认灯光模式之间切换。我还没有做任何更深入的研究,因为这是一个新的话题。暗模式的颜色切换是由操作系统自动的,还是有任何方法告诉我的应用程序切换不同的应用程序主题,如果暗模式是打开的?此外,黑暗模式也可能出现在一些Android 9设备上。 因为我使用自定义参数创建了自定义深色主题,并在资源中为每种颜色设置了深色(在中使用自定义属性,并在的主题中为它们应用

  • 问题内容: 我正在尝试向我的应用添加主题(深色主题)。因此,当用户单击活动开关时,它将使整个应用进入暗模式。我对黑暗模式进行了硬编码,只是为了看看它会是什么样子。但是现在我希望能够通过和UISwitch启用和禁用它,但是我不确定该怎么做? 然后我要做的是在每个视图控制器中调用该函数以查看其外观,但是如果开关处于打开或关闭状态,那么我必须能够访问它的bool值,然后执行该操作该功能,否则将保持不变。

  • 我正在开发一个react原生应用程序,支持黑暗主题。 我使用了react导航并使用react上下文创建了自定义主题。现在我可以在黑暗模式和光明模式之间切换使用一个按钮。但我想在打开应用程序时使用安卓主题(例如:黑暗模式)。这意味着如果在android中启用了暗模式,我的应用程序希望在打开应用程序时启用暗模式。

  • 本地持久化卷允许用户通过标准 PVC 接口以简单便携的方式访问本地存储。PV 中包含系统用于将 Pod 安排到正确节点的节点亲和性信息。 一旦配置了本地卷,外部静态配置器(provisioner)可用于帮助简化本地存储管理。请注意,本地存储配置器与大多数配置器不同,并且尚不支持动态配置。相反,它要求管理员预先配置每个节点上的本地卷,并且这些卷应该是: Filesystem volumeMode(默

  • 我正在尝试在谷歌云上迁移我的rails应用程序。我已将活动存储与地面军事系统上创建的存储桶连接起来。我上传了bucket中的文件夹“storage”,但应用程序中的所有图像都有404错误。 如何正确迁移GCS中的本地存储文件夹? 谢谢你的建议

  • 问题内容: 不幸的是,简单地返回’{}’,这意味着a在还原后变成空对象。 我发现es6-mapify允许在Map和普通对象之间进行上/下转换,所以这可能是一种解决方案,但是我希望我仅需要使用外部依赖项来持久保存我的地图。 问题答案: 假设您的键和值都是可序列化的, 应该管用。反之,使用