2016-01-01 3 views
2

У меня есть страница с параметрами. Этот компонент состоит из строки. Каждая строка является настройкой. Этот параметр - это выбор, проверка, радио или пользовательский элемент. Этот компонент обновляется двумя способами:Уровень компонента onChange?

  1. AJAX рассказывает обновить с SetState - это SetState классифицировать не как компонент OnChange, но только обновление компонентов
  2. Пользователь манипулирует строку, вызывая выбор/радио/проверить OnChange для запуска, то OnChange запускает SetState на самый верхний компонент - это SetState классифицировать как компонент OnChange

Когда # 2 происходит, то есть манипулируют пользовательский компонент, я хочу OnChange на самый верхний компонент к выстрелу. Есть ли такое событие? Я не могу найти его в жизненном цикле компонентов.

Причина, по которой я не могу использовать componentDidUpdate, заключается в том, что когда пользователь запускает изменение строки, мне нужно сделать запрос на сервер с новой информацией. Если AJAX сообщает компоненту обновить, onComponentDidUpdate будет запускаться, но мне не нужно делать запрос AJAX.

+1

donn't знать, что именно вы хотите. Не можете ли передать 'onChange' из родительского компонента в строки с реквизитами, чтобы решить ваши проблемы? Что означает 'onChange на верхней части большинства компонентов для пожара', пожалуйста? вы имеете в виду делегацию событий? –

+0

Спасибо @ZhangChao за быстрый ответ. В принципе, я хочу знать, если 'componentDidUpdate', который запускается на самом верхнем большинстве компонентов, вызван использованием пользователем setState или AJAX setState. – Noitidart

+1

Когда пользовательские манипуляции вызывают 'onChange', вы хотите вызвать' setState', а затем сделать запрос в 'componentDidUpdate', правильно? Почему вы не делаете этот запрос в 'onChange' и запускаете' setState', когда получаете ответ на этот запрос? Я думаю, что это более распространенный способ делать такие вещи, и вам не нужно делать различия между ajax-способом и пользовательским способом в 'componentDidUpdate'. –

ответ

3

Вы можете сделать это, передав обратный вызов из Top Component в свой дочерний компонент Property. Затем обратный вызов будет вызван событием Child component onChange, используя this.props.callbackName(). Например

TopComponent.js

// import react (i'm using es2015) 
// but the concept is the same whether you use it or not 

import React, {Component} from 'react' 

class TopComponent extends Component { 

    // the callback 
    onChildComponentChange(){ 
     doAjax().then(function(data){ 
     this.setState({foo: data}) 
     }) 

    } 

    render(){ 
     return (<ChildComponent onPropertyChange={this.onChildComponentChange}) /> 
    } 
} 

ChildComponent.js

import React, {Component} from 'react' 

class ChildComponent extends Component { 

    onChangeHandler(){ 
    // from this handler we call the top component callback 
    this.props.onPropertyChange(data) // the name of props we pass from top component 
    } 
    render(){ 
    return (<RowComponent onClick={this.onChangeHandler}/>) 
    } 
} 
+0

А это просто хорошее мышление, спасибо вам большое! Я тоже узнаю от этого сообщения es2015, спасибо! – Noitidart

+0

Можно ли назвать функцию обратного вызова (тот, который вы называете 'onPropertyChange')' onChange'? Я хотел бы, чтобы сохранить последовательность, но я бы стал чем-то важным? благодаря – Throoze

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