在React中使用上下文API

加布里埃尔·蒂索(Gabriel Tiso)

我开始在React中使用上下文api,因此我决定创建一个简单的主题上下文。现在,如果我进入我的React DevTools并将boolean isLightTheme更改为false,它可以工作,但是当我尝试将此功能附加到按钮上时,我会不断收到错误消息。有人可以帮我吗?

主题语境

import React, { useState, createContext } from 'react'

export const ThemeContext = createContext()

export const ThemeContextProvider = ({ children }) => {
     const [state, setState] = useState({
         isLightTheme: true,
         light: { syntax: '#555', ui: '#ddd', bg: '#eee' },
         dark: { syntax: '#ddd', ui: '#333', bg: '#555' }
     })

     const toggleTheme = () => {
         setState({ isLightTheme: !state.isLightTheme})
     }

    return (
        <ThemeContext.Provider value={{...state, toggleTheme}}>
            {children}
        </ThemeContext.Provider>
    )
}
import React, { useContext } from 'react'
import { ThemeContext } from '../context/ThemeContext'

export const ThemeToggler = () => {

    const themeContext = useContext(ThemeContext)
    const { toggleTheme } = themeContext

    return (
        <button onClick={toggleTheme}>Change Theme</button>
    )
}
赫曼特·帕萨尔(Hemant Parashar)

useState像钩API不更新状态的选择性片setState一样。它将覆盖整个状态。在这里,当您切换主题时,新状态仅{ isLightTheme: !state.isLightTheme}没有明暗键。您只需要通过更新该状态来处理此问题。这应该工作:

import React, { useState, createContext } from 'react'

export const ThemeContext = createContext()

export const ThemeContextProvider = ({ children }) => {
     const [state, setState] = useState({
         isLightTheme: true,
         light: { syntax: '#555', ui: '#ddd', bg: '#eee' },
         dark: { syntax: '#ddd', ui: '#333', bg: '#555' }
     })

     const toggleTheme = () => {
         //preserve the remaining state also
         setState({...state,isLightTheme: !state.isLightTheme})
     }

    return (
        <ThemeContext.Provider value={{...state, toggleTheme}}>
            {children}
        </ThemeContext.Provider>
    )
}

希望这可以帮助 !

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

在TypeScript中使用上下文API

来自分类Dev

使用上下文API时如何在React JS中使用Match道具

来自分类Dev

在React中使用上下文在兄弟姐妹之间传递上下文

来自分类Dev

在AppCompatActivity中使用上下文

来自分类Dev

在AppCompatActivity中使用上下文

来自分类Dev

在片段中使用上下文

来自分类Dev

调用Gatsby createPage后如何在React Component类中使用上下文

来自分类Dev

值未在react中使用上下文传递给子组件

来自分类Dev

如何在我的React Form的构造函数中使用上下文?

来自分类Dev

调用Gatsby createPage后如何在React Component类中使用上下文

来自分类Dev

在Coq模式匹配中使用上下文信息

来自分类Dev

在片段中使用上下文时出错

来自分类Dev

如何在函数中使用上下文?

来自分类Dev

在片段中使用上下文的最佳方法

来自分类Dev

在Coq模式匹配中使用上下文信息

来自分类Dev

如何在测试中使用上下文?

来自分类Dev

Mapstruct :在@Mapping 的源参数中使用上下文

来自分类Dev

如何测试使用上下文参数的Flask API

来自分类Dev

正确使用上下文

来自分类Dev

正确使用上下文

来自分类Dev

使用上下文的问题

来自分类Dev

如何使用react和typescript在同一组件文件中使用上下文?

来自分类Dev

如何在 winevt.h Windows C++ API 中的 EvtSubscribe 中使用上下文参数

来自分类Dev

从REST API填充上下文,并通过useEffect和useContext在React组件中使用它

来自分类Dev

实体框架代码优先在控制器中使用上下文

来自分类Dev

在Beanstalk中使用上下文路径部署战争的可接受方式

来自分类Dev

如何在Angular组件中使用上下文渲染模板?

来自分类Dev

我应该在电子应用程序中使用上下文隔离吗

来自分类Dev

如何在骆驼路线中使用上下文路径?

Related 相关文章

  1. 1

    在TypeScript中使用上下文API

  2. 2

    使用上下文API时如何在React JS中使用Match道具

  3. 3

    在React中使用上下文在兄弟姐妹之间传递上下文

  4. 4

    在AppCompatActivity中使用上下文

  5. 5

    在AppCompatActivity中使用上下文

  6. 6

    在片段中使用上下文

  7. 7

    调用Gatsby createPage后如何在React Component类中使用上下文

  8. 8

    值未在react中使用上下文传递给子组件

  9. 9

    如何在我的React Form的构造函数中使用上下文?

  10. 10

    调用Gatsby createPage后如何在React Component类中使用上下文

  11. 11

    在Coq模式匹配中使用上下文信息

  12. 12

    在片段中使用上下文时出错

  13. 13

    如何在函数中使用上下文?

  14. 14

    在片段中使用上下文的最佳方法

  15. 15

    在Coq模式匹配中使用上下文信息

  16. 16

    如何在测试中使用上下文?

  17. 17

    Mapstruct :在@Mapping 的源参数中使用上下文

  18. 18

    如何测试使用上下文参数的Flask API

  19. 19

    正确使用上下文

  20. 20

    正确使用上下文

  21. 21

    使用上下文的问题

  22. 22

    如何使用react和typescript在同一组件文件中使用上下文?

  23. 23

    如何在 winevt.h Windows C++ API 中的 EvtSubscribe 中使用上下文参数

  24. 24

    从REST API填充上下文,并通过useEffect和useContext在React组件中使用它

  25. 25

    实体框架代码优先在控制器中使用上下文

  26. 26

    在Beanstalk中使用上下文路径部署战争的可接受方式

  27. 27

    如何在Angular组件中使用上下文渲染模板?

  28. 28

    我应该在电子应用程序中使用上下文隔离吗

  29. 29

    如何在骆驼路线中使用上下文路径?

热门标签

归档