Родительский компонент в маршрутизаторе react, какой метод жизненного цикла использовать?

#reactjs #ecmascript-6 #react-router #jsx

#reactjs #ecmascript-6 #react-router #jsx

Вопрос:

У меня есть маршруты :

 <Router history={browserHistory}>
  <Route path="/" component={Root}>
    <Route path="/shop" component={Shop}>
      <Route path="/items" component={AllItems}></Route>
      <Route path="/collections" component={Collections}></Route>
    </Route>
  </Route>
</Router>
  

Мой магазин родительских компонентов :

 export default class Shop extends Component {
  constructor(props) {
    super(props)
    this.state=({
      user: cookie.load('user'),
    })
    this.httpHandler = axios.create({
      baseURL: 'localhost:3000',
      headers: {
        'Authorization': this.state.user.token
      }
    })
  }

  componentWillUpdate () {
    this.httpHandler('/products/')
    .then(function (response) {
      console.log('sdfsdf')
      this.setState({ data: response.data}) 
    }.bind(this))
  }

  render() {
    var childrenWithProps = React.cloneElement(this.props.children, this.state);

    return (
      <div>
        <ShopNav />
        {childrenWithProps}
      </div>
    )
  }
}
  

Дочерний компонент:

 export default class AllItems extends Component {
  constructor (props) {
    super(props)
    console.log(this.props)
   }
  render() {
   return(
                <Child products={this.state.winks} />
      )      
  }
}
  

Я пытаюсь использовать этот вызов api, а затем передавать данные в качестве реквизита моим дочерним компонентам. Но я не уверен, какое событие жизненного цикла использовать, я пробовал componentWillMount и componentWillUpdate, но в итоге даже не запускал вызов api. Я могу передать prop this.state.user , но просто хотел способ передачи данных. Должен ли я подходить к этому по-другому?

Комментарии:

1. что this.user ? Вы имеете в виду this.state.user ?

2. ой, да, this.state.user

3. componentWillMount должно работать хорошо. Я протестировал его локально без проблем. Какая версия React и react-router?

4. «react-router»: «^ 2.8.1», «react»: «^ 0.14.8»,

5. Я думаю, что моя проблема заключается в выполнении вызова в componentWillMount() Я получаю ответ, но когда я пытаюсь установить состояние ответа, я не получаю никаких данных, передаваемых в качестве реквизитов. Я думаю, что мне не хватает шага, на котором мне нужно выполнить вызов, затем установить состояние и передать его как prop. Я не слишком уверен, хотя

Ответ №1:

Вы пробовали componentWillReceiveProps(nextProps) ? Внутри него вы можете проверить, совпадает ли объект nextProps с вашим состоянием, и обновить ваше состояние.

Я надеюсь, что это то, что вы ищете