【发布时间】:2020-06-03 14:36:07
【问题描述】:
我有一个自己的 useTheme 钩子:
// custom hook
export const useTheme = () => {
const [theme, setTheme] = useState(localStorage.getItem('theme'))
const changeTheme = () => {
const newTheme = theme === LIGHT_THEME ? DARK_THEME : LIGHT_THEME
setTheme(newTheme)
localStorage.setItem('theme', newTheme)
}
return {
theme,
changeTheme
} }
以及标题中的一个按钮,用于更改主题:
<button className="change-theme-icon"
onClick={changeTheme}>CHANGE THEME</button>
还有一个 PostReview 组件,它使用了一个钩子:
const PostReview: React.FC<Props> = ({post, postRating}) => {
const {theme} = useTheme()
const [classes, setClasses] = useState(['center-block', 'post-review-wrapper'])
useEffect(() => {
setClasses([...classes, theme === 'light' ? 'background-light' : 'background-dark' ])
}, [theme])
return (<div className={classes.join(' ')}>
..........)
为什么主题变量更改后 PostReview 中的 useEffect 不触发?我做错了什么?
【问题讨论】:
-
你怎么知道它没有触发?你在那里登录吗?请制作一个可重现的示例,您可以使用codesandbox 进行演示。见How to create a Minimal, Reproducible Example。
标签: javascript reactjs react-hooks use-effect use-state