setState不在函数调用中更新

时间:2016-08-18 21:24:05

标签: javascript reactjs coffeescript flux

我已经阅读了很多有关此问题的帖子,有些this.setState是异步调用,所以每次都不会重新渲染。如何根据以下上下文解决此问题:

getInitialState: () ->
    return {
        page: ""
    }

choose: (event) ->
    console.log(@props.id) # This is the correct id that I want to pass into state
    @setState({
        page: @props.id # @state.page isn't being set to @props.id 
    })

render: () ->
    return (
        <button onClick={@choose}>Click me</button>
    )

我已尝试bind on onClick={@choose.bind(@)} onClick调用,但似乎React已自动执行此操作。单击按钮后,如何在choose()中正确设置状态?

解决方案:这是调用父组件的子组件,因此state在那里的某个地方丢失了。我所要做的就是从父组件调用传递id作为道具并通过那里访问它。

1 个答案:

答案 0 :(得分:3)

您的代码似乎正确无误。 let TabImages = [UIImage]() let HighlightedImages = [UIImage]() 不保证是同步的,它的执行可能会延迟。这意味着如果您尝试在代码中setState之后立即访问@state.name,那么您将获得旧值

@setState

所以你应该使用choose: (event) -> console.log(@props.id) # This is the correct id that I want to pass into state @setState({ page: @props.id # @state.page isn't being set to @props.id }) console.log(@state.name) # here's old value 的第二个参数,这是一个回调函数,它将在更新状态后立即被调用,所以

@setState