React Fetch On Event - лучшие практики - PullRequest
2 голосов
/ 02 апреля 2020

Наша команда является новичком в React, и мы изучаем лучшие практики, как мы go.

Одной из самых больших проблем для команд сейчас является то, как мы обрабатываем наши вызовы API и работаем с состоянием. Мы следуем советам Reacts -> «Lift Up State». Все это работает, но это приводит к тому, что наши компоненты более высокого уровня становятся большими и часто обрабатывают вызовы API, которые, как я думаю, не должны быть связаны с этим.

Приведенный ниже пример очень упрощен. В действительности каждый из этих операторов извлечения должен будет устанавливать состояние нескольких различных вещей, таких как loadingForA, statusForA, dataForA .... Это быстро приводит к очень большому состоянию и большому количеству передачи реквизитов

Есть ли какие-либо шаблоны проектирования, которые можно использовать здесь? Я посмотрел в «Render Props», но это, кажется, трудно использовать для событий API запускает

Пример:



class SelectorA extends Component {
   render(){
      return(
         <Dropdown
            onChange = {this.props.handleChange}
         >{this.props.data}</Dropdown>
         <p>{this.props.date}</p>
      )
   }


}


class App extends Component {
   constructor(props) {
        super(props);
        this.state = {
            date: '',
            dataA: {},
            dataB: {},
            dataC: {}
        };
    }
   handleChangeA() {
      fetch(someURL)
      .then(
         this.setState({dataA: fetchResult});
      )
    }

   handleChangeB() {
      fetch(someURL + this.state.dataA)
      .then(
         this.setState({dataB: fetchResult});
      )
   }

   handleChangeC() {
      fetch(someURL + this.state.dataC)
      .then(
         this.setState({dataC: fetchResult});
      )
   }

   render(){
      return(
         <SelectorA
             handleChange = {this.handleChangeA}

             date = {this.date}
             data = {this.dataA}
         />
         <SelectorB
             handleChange = {this.handleChangeB}

             date = {this.date}
             data = {this.dataB}
         />
         <SelectorC
             handleChange = {this.handleChangeC}

             date = {this.date}
             dataC = {this.dataC}
         />
      );
   }

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