【问题标题】:React Native Hook Proceed after Dispatch分发后 React Native Hook Proceed
【发布时间】:2020-04-22 09:37:17
【问题描述】:

我试图在调度之后运行方法,但是当我调度 redux 状态时,它在调度之后运行代码,然后完全调度。

<TouchableOpacity
          onPress={() => {
            dispatch(
              addData({
                name: "Test Name",
                phone: "0000",
              })
            );
            // dataReducer is the variable which returns state of reducer using selector
            console.log("Added Data: " + JSON.stringify(dataReducer)); //returns []
          }}
        >
          <Text>
            {item.name}
          </Text>
        </TouchableOpacity>

如果我再次按下它会返回更新的数组。这意味着在 onpress 完全呈现后状态会更新。我希望 onPress 在数据完全发送之前不要完成,然后继续下一行。我检查了 useDispatch() 没有附加回调方法。请指导什么是更好的方法。

【问题讨论】:

  • 找到解决方案了吗?
  • 还没有我刚刚发布的问题

标签: reactjs react-native react-redux react-hooks dispatch


【解决方案1】:

试试这个

const setReducerState = () => {
dispatch(
     addData({
     name: "Test Name",
     phone: "0000",
   })
}

<TouchableOpacity onPress={() => setReducerState()}>
          <Text>
            {item.name}
          </Text>
</TouchableOpacity>

由于异步性质,您将无法立即记录状态。

编辑

是的,您可以在调度后传递回调。

dispatch({
<your action>,
callback: () => {
 //what you want to do here
}
})

现在你在 reducer 中得到你的动作

case action.yourActionType:
     action.callback(); // this callback you wanted

【讨论】:

  • 基本上这个 TouchableOpacity 是在 Flatlist renderItem 之上的。 Flatlist 的每一项都有 onPress 方法。我想通过 Reducer 更新每个项目名称 onPress
  • 你试过了吗,你能得到名字“测试名”吗? setReducerState() ,您可以随意将名称传递给此函数。
  • 有没有办法在 dispatch 后添加回调?
  • @DIGITALJEDI 参考答案编辑以获得您的答案。
  • 它给了我语法错误。正如您在我的添加操作中提到的那样,我尝试添加回调。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-05-27
  • 2021-07-28
  • 2021-07-16
  • 2023-01-31
  • 2018-08-19
相关资源
最近更新 更多