我正在谈论connect
的mapStateToProps
论点。
我的一个组件有一个名为rules
的属性,它是一个函数数组。在mapStateToProps
中,我调用这些规则,传入当前状态。如果没有错误,规则将返回错误消息或true
。我将这些错误消息放入一个新的prop中,以便最终组件接收一组错误消息而不是一组函数。
到目前为止,这一直很好用,但现在我想添加对异步规则的支持。我现在的计划是,只要规则返回Promise而不是错误字符串,我就会发出一条消息,例如"正在检查..."而是转换为错误消息数组,但是一旦承诺得到解决,我需要"刷新"此数组并插入已解析的消息。
我想如果我能force an update那么redux将不得不再次呼叫mapStateToProps
。在这种情况下,所有的规则都会被重新评估,但是如果我不小心的话,我会收到一个新的Promise,它会直接回到原点。 但是,如果我记住这些规则,那么我可以像以前一样返回相同的Promise实例,然后check if it's settled然后将该值放入我的错误数组中。 / p>
所以现在唯一的问题是弄清楚如何在mapStateToProps
的上下文中获取对组件实例的引用,该引用只能访问当前状态和props。
一旦我的Promise解决了,我有什么办法可以强制重新渲染吗?
或者,如果我可以dispatch
解决问题,我也可以使用它。
答案 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