如何从mapStateToProps内部强制更新?

时间:2017-01-26 19:23:56

标签: reactjs redux react-redux

我正在谈论connectmapStateToProps论点。

我的一个组件有一个名为rules的属性,它是一个函数数组。在mapStateToProps中,我调用这些规则,传入当前状态。如果没有错误,规则将返回错误消息或true。我将这些错误消息放入一个新的prop中,以便最终组件接收一组错误消息而不是一组函数。

到目前为止,这一直很好用,但现在我想添加对异步规则的支持。我现在的计划是,只要规则返回Promise而不是错误字符串,我就会发出一条消息,例如"正在检查..."而是转换为错误消息数组,但是一旦承诺得到解决,我需要"刷新"此数组并插入已解析的消息。

我想如果我能force an update那么redux将不得不再次呼叫mapStateToProps。在这种情况下,所有的规则都会被重新评估,但是如果我不小心的话,我会收到一个新的Promise,它会直接回到原点。 但是,如果我记住这些规则,那么我可以像以前一样返回相同的Promise实例,然后check if it's settled然后将该值放入我的错误数组中。 / p>

所以现在唯一的问题是弄清楚如何在mapStateToProps的上下文中获取对组件实例的引用,该引用只能访问当前状态和props。

一旦我的Promise解决了,我有什么办法可以强制重新渲染吗?

或者,如果我可以dispatch解决问题,我也可以使用它。

2 个答案:

答案 0 :(得分:2)

你不能在mapState中这样做。 mapState函数旨在完全同步。如果您需要执行异步操作,请在mapState之外触发,将某些值存储在状态中,并使用结果更新它们以强制mapState重新运行。

答案 1 :(得分:1)

如何创建有状态组件?如果您将保证的结果保留在组件的状态中,则一旦保证解决,它将自动重新呈现组件。

Imports NUnit.Framework

<TestFixture()>
Public Class Class1

<Test()>
Public Sub Test_Across_DateRanges()


    Dim newClass As New MyNewClass

    Dim getAnInt = newClass.ReturnInt()

    Dim getAString = newClass.ReturnString()

    Assert.That(getAnInt = 5)
    Assert.That(getAString = "Why is this breakpoint being hit?")

End Sub

End Class



Public Class MyNewClass
    Public Function ReturnInt() As Integer
        Return 5
    End Function
    Public Function ReturnString() As String
        Return "Why is this breakpoint being hit?"
    End Function

End Class