Coffeescript 从子级更新状态

Coffeescript 从子级更新状态,coffeescript,reactjs,Coffeescript,Reactjs,我将ReactJS与CoffeeScript一起使用(: 实际上,我有一个处理状态的组件a。一个状态字段被传递给子级(在该示例中称为myChild)。子级需要从父级状态更新一些值 我怎么能这样做呢 A = React.createClass getInitialState: mystate: {test: 1} render: -> myChild {param: @state.mystate} myChild = React.createClass r

我将ReactJS与CoffeeScript一起使用(:

实际上,我有一个处理状态的组件a。一个状态字段被传递给子级(在该示例中称为myChild)。子级需要从父级状态更新一些值

我怎么能这样做呢

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

父母是真相的来源,因此孩子需要告诉父母改变自己的状态。将父母的回调传递给孩子,让孩子调用它

在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..."

我猜解决方案是:
1)创建@props.param的克隆,然后更新@props.param.test 2)ajax请求3)重新加载父组件吗?但是如何重新加载父级?
Nice,我忘记了回调解决方案:)