Подтвердить что ты не робот

Состояние обновления ReactJS от дочернего

Я использую ReactJS с CoffeeScript (:

На самом деле у меня есть компонент A, который обрабатывает состояние. Поле состояния передается дочернему элементу (так называемый myChild в этом примере). Ребенок должен обновить некоторое значение из родительского состояния.

Как я могу сделать это в режиме ReactJS?

A = React.createClass
  getInitialState: 
    mystate: {test: 1}

  render: ->
    myChild {param: @state.mystate}


myChild = React.createClass
  render: ->
    React.DOM.div {onClick: @change}, @props.param.test

  change: ->
    @props.param.test += 1 # WRONG WRONG WRONG
    ajax("/..../", JSON.stringify(@props.param))
      .done(@onDone).fail(...)

  onDone: ->
    console.log "Hum..."

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

- @props.param.test не может быть изменен так (для согласованности и должен быть неизменным).

- @props.param на самом деле является объектом внутри состояния компонента A, поэтому он должен быть обновлен с помощью @setState, что невозможно, поскольку мы находимся в дочернем элементе: (

Как я могу очистить это, чтобы иметь хороший компонент ReactJS?

Пол? Вы все еще поможете мне?: D

4b9b3361

Ответ 1

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

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

A = React.createClass
  getInitialState: ->
    mystate: {test: 1}

  incrementTest: ->
    @setState {mystate: {test: @state.mystate.test + 1}}

  render: ->
    myChild {onChange: @incrementTest, param: @state.mystate}


myChild = React.createClass
  render: ->
    React.DOM.div {onClick: @change}, @props.param.test

  change: ->
    @props.onChange
    ajax("/..../", JSON.stringify(@props.param))
      .done(@onDone).fail(...)

  onDone: ->
    console.log "Hum..."