не могу обновить состояние с помощью реквизита - PullRequest
0 голосов
/ 14 апреля 2020

нашел это: https://reactjs.org/blog/2018/03/27/update-on-async-rendering.html#new -lifecycle-getderivedstatefromprops

Я почти уверен, что это то, что я ищу.

Я пытаюсь обновить свое состояние при смене реквизита, пытаясь обновить вид при смене реквизита.

(почему то, что я описываю, звучит как ракетостроение? В основном на неандертальском языке говорят Array go для просмотра)

Мой массив из подписки (нет не html .get, это просто магазин бедняков).

Я подписан в родительском и передать его как опору, потому что, очевидно, наличие его в том же компоненте не будет обновлять.

моя проблема в том, что getDerivedStateFromProps() запускается при инициализации, но не при обновлении (по какой-то причине значение инициализации не является передается от родителя) и больше не срабатывает после этого, когда я делаю щелчок, который в конечном итоге правильно вызывает console.logs в родительском элементе.

componentDidUpdate() с другой стороны, вообще не сработает.

У меня есть это:

interface Props {
    mything: string
}

interface State {
    mything: string
}

class Component extends React.Component<Props, State> {

  constructor(props: any) {
     super(props);
     this.state = { mything: ''} 
  }

  static getDerivedStateFromProps(props: Props, state: State) {
    console.log('hi', props);
    return {tanks: props.mything}
  }

  componentDidUpdate(prevProps: Props, prevState: State){
    console.log('ho');
    if(prevProps.mything !== this.props.mything){
        this.setState(state => ({
            mything: this.props.mything
        }));
    }
  }

  componentWillReceiveProps(nextProps: Props, nextContext: Props): void {
    console.log('d')
    this.setState(state => ({
        mything: this.props.mything
    }));
  }

  render() {
      return(
         {this.state.mything.map((thing: thingType, index: number) => {
            return (
               <div key={index} />
               </div>
                   )
         })}
      )
  }

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

, поэтому в приведенном выше коде я указываю на что-то состояние, а не на проп mything.

Я не заинтересован в использовании componentDidUpdate() или getDerivedStateFromProps() Я просто думал, что они будут моим решением, и, как вы можете видеть выше, я попробовал componentWillReceiveProps() с еще меньшим успехом, плюс я узнал, что это осуждается. есть UNSAFE_componentWillReceiveProps(), но одного этого имени мне достаточно, чтобы понять, что я буду плыть вверх по течению.

но в его нынешнем виде я не могу найти способ скопировать реквизит в состояние. (и, конечно, это произойдет при смене реквизита).

1 Ответ

0 голосов
/ 14 апреля 2020

Я выяснил, что объявления состояния в родительском и передаваемого состояния (вместо глобальной переменной) ребенку было достаточно для ребенка, использующего реквизиты для обновления всегда, никакой метод в ребенке не нужен.

this материал не очевиден и должен быть объяснен в документах.

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