2016-12-20 6 views
1

Я использую в качестве компонента формы редукцию, редукцию и реакцию-выбор, как показано ниже. У меня возникла проблема с использованием реквизита в качестве значения множественного выбора формы.Невозможно получить доступ к данным this.props внутри конструктора, реагировать + reducex

Многоэкранное значение отображается и работает корректно при загрузке реквизита или при обновлении страницы. Однако в нормальных случаях использования он работает неправильно.

Смарт-контейнер вызывает asyncconnect для отправки данных с книжным бегуном, и я использую соединение в этом компоненте для доступа к this.props.bookRunners.

class Form extends Component { 
    constructor(props) { 
    super(props); 
    const bookRunnerArray = this.getBookRunnerArray(this.props.bookRunners.bookRunners); 
    this.state = { 
     options: bookRunnerArray, 
     value: [], 
    }; 
    } 

Подключение к магазину:

const mapStateToProps = (state) => { 
    return { 
    bookRunners: state.bookrunners, 
    }; 
}; 

const mapDispatchToProps = (dispatch) => { 
    return { actions: bindActionCreators(dealActions, dispatch) } 
}; 
export default connect(mapStateToProps, mapDispatchToProps)(Form); 

Я думаю this.props.bookRunners пуст, когда я пытаюсь установить начальное состояние внутри конструктора. Я пробовал использовать componentenetWillMount(), но не повезло. Пожалуйста помоги!

+0

Как вы подключаетесь к магазину? – Hosar

+0

Вы не должны использовать this.props в своем конструкторе. Конструктор создает для вас этот файл. Вместо этого вы можете получить доступ к значению просто с помощью 'props. (YourValue)' – Chase

+0

Спасибо за ваше примечание. Я изменил его на реквизиты, но все еще та же проблема. –

ответ

0

Приведенный ниже код решает проблему. супер (реквизит) и поддержка, доступная в конструкторе, все еще были «выборками». Поэтому не было необходимых данных. componentenetWillMount также был тем же случаем. Тем не менее, мне удалось получить доступ к данным из компонентаWillReceiveProps(). Пожалуйста, дайте мне знать, есть ли у кого-нибудь мысли.

componentWillReceiveProps() { 
    if(!this.props.bookRunners.isFetching && this.state.options.isEmpty){ 
     const bookRunnerArray = this.getBookRunnerArray(this.props.bookRunners.bookRunners); 
     this.setState ({ 
     options: bookRunnerArray, 
     }) 
    } 
    } 

--- день 2 работал над другим контейнером с той же проблемой. И решил, что инициализация компонента insideDidUpdate() + внутри себя ведет себя более последовательно.

Итак, ниже + конструктор, показанный выше.

componentDidUpdate() { 
    if(!this.props.bookRunners.isFetching && this.state.options.isEmpty){ 
     const bookRunnerArray = this.getBookRunnerArray(this.props.bookRunners.bookRunners); 
     this.setState ({ 
     options: bookRunnerArray, 
     }) 
    } 
    } 
0

Похоже, у вас есть опечатка на вашей mapStateToProps функции. Измените state.bookrunners на state.bookRunners на объект возврата.

+0

На самом деле у меня есть состояние как букраннеры и реквизиты как bookRunners ... Я не знаю, странно ли это, но это помогает мне различать состояние против реквизита. –

Смежные вопросы