【发布时间】:2020-09-21 11:09:34
【问题描述】:
我有一个demo
它是一个使用 Typescript 的简单 React 应用程序。
我正在尝试使用 Reacts Context api
我创建了一个上下文 ThemeContext,其中包含用于其他组件的简单主题样式值。
然后我尝试使用这个主题上下文来设置书籍列表的样式 - Booklist.tsx
我的问题是我根本无法让它工作并且什么都没有显示
抱歉,我知道这很模糊,但谁能帮忙看看我哪里出错了。
index.tsx
import React from 'react';
import BookList from './Booklist';
import ThemeContextProvider from './ThemeContext';
const App:React.FC = () => {
return (
<div className="App">
<ThemeContextProvider>
<BookList />
</ThemeContextProvider>
</div>
);
}
export default App;
ThemeContext.tsx
import React, {createContext} from 'react'
export interface Props {}
export interface State {
lightTheme: boolean
light:{syntax: string, ui: string, bg: string}
dark:{syntax: string, ui: string, bg: string}
toggleTheme:boolean
}
const defaultState:State = {
lightTheme: true,
light:{syntax:'', ui:'', bg:''},
dark:{syntax:'', ui:'', bg:''},
toggleTheme:false
}
export const ThemeContext = createContext(defaultState)
class ThemeContextProvider extends React.Component<Props, State> {
constructor(props: Props){
super(props)
this.state = {
lightTheme: true,
light: {syntax: '#555', ui: '#ddd', bg: '#eee'},
dark: {syntax: '#ddd', ui: '#333', bg: '#555'},
toggleTheme: false
}
}
render() {
return (
<ThemeContext.Provider value={{...this.state}}>
{this.props.children}
</ThemeContext.Provider>
);
}
}
export default ThemeContextProvider;
Booklist.tsx
import React from 'react'
import { ThemeContext } from './ThemeContext';
export interface Props {}
export interface State {
lightTheme: boolean
light:Darkness
dark:Darkness
}
interface Darkness{
syntax: string
ui: string
bg: string
}
class BookList extends React.Component<Props, State> {
render() {
return(
<ThemeContext.Consumer>
{(state) => {
const { lightTheme, light, dark} = this.state
const theme = lightTheme ? light : dark
return(
<div style={{color: theme.syntax, background: theme.bg}}>
<ul>
<li style={{background:theme.ui}}>Book One</li>
<li style={{background:theme.ui}}>Book Two</li>
</ul>
</div>
)
}}</ThemeContext.Consumer>
)
}
}
export default BookList;
【问题讨论】:
-
有什么错误?
标签: reactjs typescript react-context