首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >ThemeUI的useThemeUI不包含useColorMode

ThemeUI的useThemeUI不包含useColorMode
EN

Stack Overflow用户
提问于 2020-01-02 08:51:52
回答 1查看 1.6K关注 0票数 0

我试图在Rebass中使用主题,并建议主题UI进行主题化。在遵循下面的指南之后,我无法让setColorMode在我的故事书中工作。

进口useColorMode

代码语言:javascript
复制
import React from 'react'
import { ColorMode, ThemeProvider, useColorMode } from 'theme-ui'
const ThemeWrapper = (props) => {
  const [colorMode, setColorMode] = useColorMode() // error
  //...
}

我将此作为错误来接收:useColorMode需要ThemeProvider组件

进口useThemeUI

代码语言:javascript
复制
import { ColorMode, ThemeProvider, useThemeUI } from 'theme-ui'
const ThemeWrapper = (props) => {
  const context = useThemeUI()
  const { setColorMode } = context
  //...
}

稍后,我有setColorMode不是一个函数

使用context检查此console.log,它包含以下内容:

代码语言:javascript
复制
{
  components: Object { p: {…}, b: {…}, i: {…}, … }
  emotionVersion: "10.0.27"
  theme: null
}

useColorMode无处可寻。

我做错了什么?

我现在的代码是:

.storybook/config.js

代码语言:javascript
复制
import React, { useEffect } from 'react'
import addons from '@storybook/addons';
import { addDecorator, configure } from '@storybook/react';
import { ColorMode, ThemeProvider, useThemeUI } from 'theme-ui'
import theme from '../theme'

const channel = addons.getChannel();

const ThemeWrapper = (props) => {
  const context = useThemeUI()
  const { setColorMode } = context

  console.log(context)

  const setDarkMode = isDark => setColorMode(isDark ? 'dark' : 'default')

  useEffect(() => {
    channel.on('DARK_MODE', setDarkMode);
    return () => channel.removeListener('DARK_MODE', setDarkMode);
  }, [channel, setColorMode]);

  return (
    <ThemeProvider theme={theme}>
      <ColorMode/>
      {props.children}
    </ThemeProvider>
  );
}

addDecorator(renderStory => <ThemeWrapper>{renderStory()}</ThemeWrapper>);

configure([
  require.context('../components', true, /\.stories\.(jsx?|mdx)$/),
  require.context('../stories', true, /\.stories\.(jsx?|mdx)$/)
], module);
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-01-02 17:30:48

我在这里问:https://github.com/system-ui/theme-ui/issues/537和我设法纠正了我的问题代码。

错误是由于函数useColorMode没有在<ThemeProvider>中调用而产生的。

为了缓解这个问题,我将配置文件更改为以下内容。它解决了我的问题。

代码语言:javascript
复制
import React, { useEffect } from 'react'
import addons from '@storybook/addons';
import { addDecorator, configure } from '@storybook/react';
import { ColorMode, ThemeProvider, useColorMode } from 'theme-ui'
import theme from '../theme'

const channel = addons.getChannel();

const ThemeChanger = () => {
  const [colorMode, setColorMode] = useColorMode();

  const setDarkMode = isDark => setColorMode(isDark ? 'dark' : 'default')

  useEffect(() => {
    channel.on('DARK_MODE', setDarkMode);
    return () => channel.removeListener('DARK_MODE', setDarkMode);
  }, [channel, setColorMode]);

  return <div/>
}

const ThemeWrapper = ({ children }) => {
  return (
    <ThemeProvider theme={theme}>
      <ThemeChanger/>
      <ColorMode/>
      {children}
    </ThemeProvider>
  );
}

addDecorator(renderStory => <ThemeWrapper>{renderStory()}</ThemeWrapper>);

configure([
  require.context('../components', true, /\.stories\.(jsx?|mdx)$/),
  require.context('../stories', true, /\.stories\.(jsx?|mdx)$/)
], module);
票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/59560557

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档