【发布时间】:2020-04-19 14:25:33
【问题描述】:
我正在尝试在已编译的 Gatsby 构建中使用 react-toggle 和 react-cookie。
对于那些不知道的人,Gatsby 将 ReactJS 编译成静态输出(基本上是纯 HTML,在客户端有反应。
我基本上想使用 React-toggle 根据 cookie 值在选中/未选中之间切换。
这里的挑战是,因为代码编译为静态输出,它似乎在服务器端/在其编译之前运行,因此需要从它自己的函数访问 defaultChecked。 我们不想直接访问 cookie,反正它是未定义的。
const Toggle = ({cookieName}) => {
const [cookie, setCookie] = useCookies([cookieName]);
const getCookieValue = () => typeof cookie[cookieName] === "undefined" ? false : cookie[cookieName] === "true" ? true : false;
const setCookieValue = (e) => setCookie(cookieName, e.target.checked, {path: '/'});
return (
<ToggleWrap>
<ReactToggle
defaultChecked={getCookieValue()}
icons={{
checked: <ToggleText>Option 1</ToggleText>,
unchecked: <ToggleText>Option 2</ToggleText>
}}
onChange={setCookieValue}
/>
</ToggleWrap>
)
};
即使 cookie 发生变化,defaultChecked 始终相同,这就是问题所在。 (总是错误的)。
【问题讨论】:
标签: reactjs gatsby react-cookie react-toggle