0

我正在尝试在我的 ract-native 应用程序中关联 api。但我收到了这个错误。 TypeError:TypeError:无法读取未定义的属性“编号”。我的代码有什么问题?

appContext.js

import React from 'react';

export const AppContext = React.createContext();

class AppProvider extends React.Component {
    constructor(props) {
        super(props);
        this.state = {
            number: 10,
        };
    }

    render() {
        return 
        (
            <AppContext.Provider value={this.state}>
                {this.props.children}
            </AppContext.Provider>
        )
    }
}

export default AppProvider;

homeScreen.js

import { AppContext } from './appContext';
<AppContext.Consumer>
    {(context) => context.number}
</AppContext.Consumer>
4

1 回答 1

2

这是因为您没有AppProvider在应用程序的任何地方使用您的组件。试试这样:

const AppContext = React.createContext();

class AppProvider extends React.Component {
  constructor( props ) {
    super( props );
    this.state = {
      number: 10,
    };
  }

  render() {
    return (
      <AppContext.Provider value={this.state}>
        {this.props.children}
      </AppContext.Provider>
    );
  }
}

class App extends React.Component {
  render() {
    return (
      <AppProvider>
        <AppContext.Consumer>
          {context => context.number}
        </AppContext.Consumer>
      </AppProvider>
    );
  }
}

AppProvider这里只是一个标准组件。它呈现了上下文Provider,并且得到了一些孩子。所以,你应该AppProvider在你的应用程序的某个地方使用这个组件,并传递一个带有Consumer.

如果您想将上下文保存在单独的文件中,则如下所示:

上下文和提供者组件

import React from "react";

export const AppContext = React.createContext();

class AppProvider extends React.Component {
  constructor( props ) {
    super( props );
    this.state = {
      number: 1745,
    };
  }

  render() {
    return (
      <AppContext.Provider value={this.state}>
        {this.props.children}
      </AppContext.Provider>
    );
  }
}

export default AppProvider;

主要成分

import React from "react";
import AppProvider, { AppContext } from "./AppProvider";

class App extends React.Component {
  render() {
    return (
      <AppProvider>
        <AppContext.Consumer>
          {context => context.number}
        </AppContext.Consumer>
      </AppProvider>
    );
  }
}

export default App;
于 2018-09-24T14:49:04.660 回答