NextJS + Контекст реагирования: как загрузить данные? - PullRequest
0 голосов
/ 15 января 2019

Я исследовал nextjs (7) + контекст реакции для моего проекта. Моя проблема заключается в том, как получить данные в getInitialProps по провайдеру?

1 Ответ

0 голосов
/ 16 января 2019

Создать компонент с именем components/CounterProvider.js

import React, { Component } from 'react'

    /* First we will make a new context */
    const CounterContext = React.createContext()

    /* Then create a provider Component */
    class CounterProvider extends Component {
      state = {
        count: 0
      }

      increase = () => {
        this.setState({
          count: this.state.count + 1
        })
      }

      decrease = () => {
        this.setState({
          count: this.state.count - 1
        })
      }

      render () {
        return (
          <CounterContext.Provider
            value={{
              count: this.state.count,
              increase: this.increase,
              decrease: this.decrease
            }}
          >
            {this.props.children}
          </CounterContext.Provider>
        )
      }
    }

    /* then make a consumer which will surface it */
    const CounterConsumer = CounterContext.Consumer

    export default CounterProvider
    export { CounterConsumer }

затем в pages/_app.js используйте этот код, чтобы использовать провайдера и делить его между всеми компонентами:

import App, { Container } from 'next/app'
    /* First we import our provider */
    import CounterProvider from '../components/CounterProvider'

    class MyApp extends App {
      render () {
        const { Component, pageProps } = this.props
        return (
          <Container>
            {/* Then we wrap our components with the provider */}
            <CounterProvider>
              <Component {...pageProps} />
            </CounterProvider>
          </Container>
        )
      }
    }

    export default MyApp

наконец, используйте его в любом компоненте, подобном этому: pages/index.js

import React, { Component } from 'react'
    /* First we import the consumer */
    import { CounterConsumer } from '../components/CounterProvider'

    export default class index extends Component {
      render () {
        return (
          /* Then we use our context through render props */
          <CounterConsumer>
            {({ count, increase, decrease }) => (
              <div>
                <p>Counter: {count}</p>
                <button onClick={increase}>Increase</button>
                <button onClick={decrease}>Decrease</button>
              </div>
            )}
          </CounterConsumer>
        )
      }
    }

Для получения дополнительной информации следуйте этому примеру

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...