Могу ли я передать состояние компонента в HoC? - PullRequest
0 голосов
/ 22 февраля 2019

Есть ли способ отправить данные из состояния компонента в HoC?

Мой компонент

import React, { Component } from 'react';
import withHandleError from './withHandleError';

class SendScreen extends Component {

  contructor() {
    super();
    this.state = {
      error: true
    }
  }

  render() {
    return (
    <div> Test </div>
    )
  }
};


export default withHandleError(SendScreen)

Мой компонент HoC:

import React, { Component } from 'react';
import { ErrorScreen } from '../../ErrorScreen';
import { View } from 'react-native';

export default Cmp => {
  return class extends Component {
    render() {
      const { ...rest } = this.props;
      console.log(this.state.error)  //// Cannot read property 'error' of null
      if (error) {
        return <ErrorScreen />
      }

      return <Cmp { ...rest } />
    }
  }
}

Есть ли способ сделать это?

Единственный вариант - предоставить реквизит, который должен прийти к компоненту SendScreen извне ??

Ответы [ 2 ]

0 голосов
/ 22 февраля 2019

Родитель не знает о состоянии ребенка.Хотя он может получить экземпляр дочернего элемента с ref и доступом state, он не может следить за обновлениями состояния, но необходимость сделать это указывает на проблему проектирования.

Это относится к поднимая состояние .Родитель должен быть уведомлен об ошибке:

export default Cmp => {
  return class extends Component {
    this.state = {
      error: false
    }

    onError() = () => this.setState({ error: true });

    render() {
      if (error) {
        return <ErrorScreen />
      }

      return <Cmp onError={this.onError} { ...this.props } />
    }
  }
}
0 голосов
/ 22 февраля 2019
import React, { Component } from 'react';
import withHandleError from './withHandleError';

class SendScreen extends Component {

  contructor() {
    super();
    this.state = {
      error: true
    }
  }

  render() {
    return (
    <div state={...this.state}> Test </div>
    )
  }
};


export default withHandleError(SendScreen)

Вы можете передать состояние как опору в вашем компоненте.

...