Магазин Redux не доступен вовремя React Constructor - PullRequest
0 голосов
/ 12 октября 2018

Я работаю с Redux & React в течение нескольких месяцев.Я обычно всегда использую Chrome без проблем.(На самом деле бесконечные ошибки :)).

Когда я начал тестировать в Firefox, я столкнулся с проблемой, с которой мне нужна помощь ... Чтобы узнать, есть ли идеальный способ справиться с этим ...

Проблема Redux Props для MapStateToProps еще не доступны, когда вызывается конструктор, что означает, что я не могу построить состояние своих компонентов в конструкторе компонентов.Эти реквизиты становятся доступны быстро после этого в функции рендера.На данном этапе уже слишком поздно, потому что я не могу построить состояние в функции рендеринга (может ли это как-то сработать, но было бы неправильно подходить правильно?).

На данный момент я использую componentWillReceiveProps идублирующая мою конструкторскую функцию с одним исключением

конструкторская функция

constructor(props){
super(props);
//Loads of code named A
this.state = {state:A};
}

Компонент получит реквизитную функцию

componentWillReceiveProps (){
//Loads of code named A
this.setState({state:A});
}

Может быть проблема с перезаписью моего состояния здесь, нодля моего точного случая здесь только отображение данных, никаких изменений пользовательского интерфейса не происходит ... Это не выглядит правильным способом в любом случае ...

Я читал эту статью https://reactjs.org/blog/2018/06/07/you-probably-dont-need-derived-state.html

IЯ не совсем уверен, понимаю ли я это полностью.Я немного поэкспериментировал с этим без рабочих решений.

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

Есть обсуждения по Slack, но, похоже, никто не решает это точно.Я пробовал поиск в Google, но не смог найти точную проблему ...

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

Есть какие-нибудь мысли по этому вопросу?

Даниэль

1 Ответ

0 голосов
/ 13 октября 2018

Почему, по вашему мнению, вам нужно перевести данные, полученные с реквизита, в состояние компонента?Что касается использования данных, между ними нет никакой разницы, за исключением того, что у вас больше шансов попасть в беду, если вы скопируете реквизиты в состояние (см. Ссылку, которую вы разместили).

const { A } = this.state;
const { A } = this.props;

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

render() {
  const { A } = this.props;
  if (!A) {
    return <LoadingIndicator />
  }
  ...
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...