【问题标题】:TypeError: render is not a function Context Api Multiple ContextTypeError: render is not a function Context Api Multiple Context
【发布时间】:2021-01-25 20:13:29
【问题描述】:

我想动态更改我的网络应用程序的背景,因此我想使用包含上下文的上下文。我收到此错误:TypeError:render is not a function。 这是 ThemeContext.js:

class BookList extends Component {
    render() {

        
        return (
            <ThemeContext.Consumer> {(contextTheme) => (
                <BookContext.Consumer>
                    {contextBook => {
                        
                        const {books} = contextBook;
                        const { isDarkTheme, dark, light } = contextTheme;
                        const theme = isDarkTheme ? dark : light;  
                        return (
                        ...
                        ...
                         )
                    }}
                </BookContext.Consumer>
            )}
            </ThemeContext.Consumer>
        
        )
    }
}
export default BookList;
这是 BookList.js,所以它是一个组件。

class ThemeContextProvider extends React.Component {
    state = {
        isDarkTheme : true,
        dark: { bg: '#d2f3df', txt: '#0f0f0f', hover: '#f0f0f0ca'},
        light : {bg : '#288888', txt: '#f0f0f0', hover : '#f0f0f0ca'}
    }
    render() {
        return (
            <ThemeContext.Provider value={{...this.state}}>
                {this.props.children}
            </ThemeContext.Provider>
        )
    }
}
export default ThemeContextProvider;

这是子上下文(BookContext):

import React from 'react';

export const BookContext = React.createContext();

class BookContextProvider extends React.Component {
    state = {
    ...
    ...
     }
    render() {
        return (
            <BookContext.Provider value= {this.state}>
                {this.props.children}
            </BookContext.Provider>
        )
    }
}
export default BookContextProvider;

【问题讨论】:

  • 尝试去掉&lt;ThemeContext.Provider value={{...this.state}}&gt;这里的双{{ }},只有一个{}
  • 当我删除它时,我从终端收到一个错误。
  • 你遇到了什么错误?
  • '语法错误:意外的令牌。'如果我删除两个括号之一。

标签: javascript css reactjs producer-consumer react-context


【解决方案1】:

如果你想使用 render 方法,你需要从 react 导入组件或使用 React.Component 访问它:


// import React
import React from 'react';

// create class as extension of React.Component
class BookList extends React.Component {
    render() {

        
        return (
            <ThemeContext.Consumer> {(contextTheme) => (
                <BookContext.Consumer>
                    {contextBook => {
                        
                        const {books} = contextBook;
                        const { isDarkTheme, dark, light } = contextTheme;
                        const theme = isDarkTheme ? dark : light;  
                        return (
                        ...
                        ...
                         )
                    }}
                </BookContext.Consumer>
            )}
            </ThemeContext.Consumer>
        
        )
    }
}
export default BookList;

作为旁注,我建议使用功能组件。您没有在此组件中使用,因此最好将其用作函数。即使您想在功能组件中使用状态,您也可以使用React Hooks

这里是一个功能组件:

const BookList = () => {
return (
            <ThemeContext.Consumer> {(contextTheme) => (
                <BookContext.Consumer>
                    {contextBook => {

                        const {books} = contextBook;
                        const { isDarkTheme, dark, light } = contextTheme;
                        const theme = isDarkTheme ? dark : light;  
                        return (
                        ...
                        ...
                         )
                    }}
                </BookContext.Consumer>
            )}
            </ThemeContext.Consumer>

        )
}

export default BookList

【讨论】:

  • 我认识他们。我不只是分享代码中不必要的部分。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-06-24
  • 1970-01-01
相关资源
最近更新 更多