Javascript 使用从基于React的GatsbyJS中的主题UI插件导入的ColorMode';“由于”而无法工作;InvalidCharacterError:字符串包含无效字符; 我使用的是盖茨比的主题和插件 我学会了使用Hooks'useColorModefrom 我的代码完全正确 我已经清除了GatsbyJS、npm和browser的缓存,但同样的错误仍然存在 你可以把我的小包裹拿来
编译后,我收到两个错误:Javascript 使用从基于React的GatsbyJS中的主题UI插件导入的ColorMode';“由于”而无法工作;InvalidCharacterError:字符串包含无效字符; 我使用的是盖茨比的主题和插件 我学会了使用Hooks'useColorModefrom 我的代码完全正确 我已经清除了GatsbyJS、npm和browser的缓存,但同样的错误仍然存在 你可以把我的小包裹拿来,javascript,reactjs,jsx,gatsby,theme-ui,Javascript,Reactjs,Jsx,Gatsby,Theme Ui,编译后,我收到两个错误: TypeError:setMode不是一个函数 InvalidCharacterError:字符串包含无效字符: 检查我的全部代码: /** @jsx jsx */ import { jsx, Styled, useColorMode } from 'theme-ui' import { Context } from '../../common' import SelectLanguage from './SelectLanguage' import { Nav
李>TypeError:setMode不是一个函数
:InvalidCharacterError:字符串包含无效字符
/** @jsx jsx */
import { jsx, Styled, useColorMode } from 'theme-ui'
import { Context } from '../../common'
import SelectLanguage from './SelectLanguage'
import { Navegador, Input, Label, Submenu, StyledHeader } from './styles'
function Header()
{
const themes = ['deep', 'funk', 'future', 'swiss'];
const modes = ['default', 'dark'];
const [mode, setMode, setTheme, theme] = useColorMode()
return (
<Styled.root>
<Context.Consumer>
{({ toggleLanguage, lang }) => (
<StyledHeader>
<Navegador id="menu">
<li>
<SelectLanguage lang={lang} toggleLanguage={toggleLanguage} />
</li>
<li>
<Input id="modes" type="checkbox" name="menu"/>
<Label for="modes">Modes</Label>
<Submenu className="submenu">
<li onClick={e => setMode("default")}> Light </li>
<li onClick={e => setMode("dark")}> Dark </li>
</Submenu>
</li>
<li>
<Input id="themes" type="checkbox" name="menu"/>
<Label for="themes">Themes</Label>
<Submenu className="submenu">
<li onClick={e => setTheme("deep")}> Deep </li>
<li onClick={e => setTheme("funk")}> Funk </li>
<li onClick={e => setTheme("future")}> Futuristic </li>
<li onClick={e => setTheme("swiss")}> Swiss </li>
</Submenu>
</li>
</Navegador>
</StyledHeader>
)}
</Context.Consumer>
</Styled.root>
)
}
export default Header
/**@jsx-jsx*/
从“主题ui”导入{jsx,已设置样式,使用ColorMode}
从“../../common”导入{Context}
从“./SelectLanguage”导入SelectLanguage
从“./styles”导入{Navegador,输入,标签,子菜单,StyledHeader}
函数头()
{
const-themes=['deep','funk','future','swiss'];
常量模式=[“默认”,“暗”];
const[mode,setMode,setTheme,theme]=useColorMode()
返回(
{({toggleLanguage,lang})=>(
模式
setMode(“默认”)}>Light
setMode(“暗”)}>dark
主题
setTheme(“deep”)}>deep
setTheme(“funk”)}>funk
未来派
setTheme(“瑞士”)}>swiss
)}
)
}
导出默认标题
查看您提供的doumentation链接,useThemeUI
挂钩返回值似乎包含主题
、组件
、颜色模式
和设置颜色模式
属性。您可以使用该钩子而不是useColorMode
hook。并将模式
和设置模式
变量分别更改为颜色模式
和设置颜色模式
。这可以解决“setMode不是函数”的问题,同时仍然允许您访问theme属性
相同的setMode
问题可能是导致出现此invalidCharacterError
错误的根本原因。因此,解决该问题也可能导致此错误消失。否则,请查看您应该使用的字符集。现在最常见的是utf8。如果您的应用程序包含变音符号、变音符号、象形文字e.t.c.,那么您可能必须为该用例使用适当的字符集
还要验证
setTheme
是否是useThemeUI
hook返回值的有效属性。与setMode
非常相似,您提供的文档中没有提到它。它可能不存在。我为我的缺席和我的错误感到非常抱歉。我犯了一个错误,因为我忘了更新文件链接,因为该网站的共享链接已过期。我切换到谷歌驱动。请再次检查链接。实际上,setColorMode
和setMode
是变量。一个用于颜色切换,另一个用于黑暗和光明模式。不用担心,你能把它加载到codesandbox.io吗?如果需要的话,通过这种方式进行复制和调试会更容易。就是这样。应用程序没有加载。Codesandbox产生此错误:“无法获取依赖项,请在几秒钟后重试:无法读取未定义的属性“name”。你知道它们可能是哪些依赖项吗?我选择了错误的沙盒,因为它是基于反应的。我用叉子叉了盖茨比沙箱,它成功了。奇怪的是,它在CodeSandbox上工作,因为它显示它是setTheme
。你是对的。我将setTheme
更改为setMode
。成功了。但它在本地不起作用,它给出了相同的错误。我留给你一份礼物。我认为你最好在本地测试和发现。