关于context跟hooks的一个问题
来源:5-6 Router原理及React-router

李行知
2019-01-15
#提问#
关于hooks跟context一起使用的代码导致的一个问题。
我希望在子组件中调用方法来改变context中的值,一开始是通过props来进行传函数进行改变。
代码类似下面这样
const [is,setIs]=useState(false)
const changeTheme = () => {
console.log(is);
setIs(!is)
console.log(theme.theme.color);
if(theme.theme.color==='block'){
setTheme(themeDark)
}else{
setTheme(themeLight)
}
// setTheme((pre) => {
// if (pre.theme.color === 'black') {
// return themeDark
// }
// else {
// return themeLight
// }
// })
}
const themeLight = {
theme: {
color: 'black',
background: 'white',
},
changeTheme
}
const themeDark = {
theme: {
color: 'white',
background: 'black',
},
changeTheme
}
const [theme, setTheme] = useState(themeLight)
app.js
<Header changeTheme={changeTheme}/>
Header.js
<div onClick={()=>props.changeTheme()} style={context.theme}>主题</div>
这样是可以正确的
false true false true的输出的
但是无法改变color
而如果我使用了被注释的代码,则可以显示值
如果我在Header.js中
使用
<div onClick={()=>context.changeTheme()} style={context.theme}>主题
这样的代码 则clg is 一直为false
求解
写回答
2回答
-
Rosen
2019-01-18
发现两个问题
这里应该是theme.color吧,不是你写的theme.theme
theme对象里放了changeTheme方法有些奇怪,没次改变状态的时候还要重置下方法?不应该是新版本的新用法吧?
042019-01-21 -
Rosen
2019-01-17
<Header changeTheme={changeTheme}/> 这里的changeTheme从哪来的?改变主题的话,应该要有setState,或者调用父级方法的操作。看这坨代码有点乱,你再捋捋,不行打包发我看看
012019-01-18
相似问题
关于用户权限的问题
回答 1
关于路由路径刷新问题
回答 2