reactjs - Redux 发现 prevState 和 currentState 的变化
问题描述
我正在创建一个加密代码应用程序(使用 websocket 表单 Socket.io),我将所有加密硬币详细信息存储在 redux 存储中。
websocket 只给了我价值已经改变的硬币的数据,在收到这些数据后,我调度了一个动作,用新的硬币值更新 redux 存储。
componentDidUpdate() {
var socket = openSocket('https://coincap.io');
var updateCoinData = [...this.props.cryptoLoaded]; //
let refinedData = {}
socket.on('trades', (tradeMsg) => {
for (let i=0; i<updateCoinData.length; i++) {
if (updateCoinData[i]["short"] == tradeMsg.coin ) {
console.log(tradeMsg.coin)
//Search for changed Crypto Value
updateCoinData[i]["perc"] = tradeMsg["message"]["msg"]["perc"]
updateCoinData[i]['price'] = tradeMsg['message']['msg']['price']
//Update the crypto Value state in Redux
this.props.updateCrypto(updateCoinData);
console.log("we are inside websocket")
}
}
})
}
为此,我分派一个动作,然后在减速器中像这样更新状态
export default function(state = initialState, action) {
switch(action.type) {
case CRYPTO_FETCHING:
return {
...state,
itemsSomething: action.payload
}
case CRYPTO_FETCH_SUCESS:
return {
...state,
itemsSucess: action.payload
}
case CRYPTO_DATA_FAIL:
return {
...state,
itemsFail: action.payload
}
case UPDATE_CRYPTO_DATA:
return {
...state,
itemsSucess: action.payload
}
default:
return state
}
}
现在,我想突出显示值已更改的硬币(可能使文本变粗,或更改背景),我需要将之前的状态与新状态进行比较。
我怎样才能做到这一点?
解决方案
这是因为 reducer 没有正确更新状态。react
仅当状态发生变化时才重新渲染。作为updateCoinData
一个数组,最好使用以下代码
case REDUCER_TYPE:
return Object.assign({}, state, {
array: action.array
})
您可以使用componentWillReceiveProps
. 如果您从中获得新props
的信息,这将执行reducers
componentWillReceiveProps(nextProps){
if(this.props.property != nextProps.property){
///do what ever you want
}
}
推荐阅读
- python - 多线程一个 numpy nditerator
- java - 无法识别的选项:-n 错误:无法创建 Java 虚拟机。错误:发生了致命异常。程序将会退出。在java中
- css - 我们应该如何在微服务中保持视觉样式和模板是最新的
- node.js - MongoDB获得餐厅剩余席位
- javascript - 如何获取网页元素中文本的矩形(不是元素本身的矩形)?
- c++ - Ownerdraw CListCtrl 复选框
- scala - 在 State Monad 中使用 flatMap 的典型场景?
- azure - 无法从 Visual Studio 2019 登录 Azure 帐户
- android - Android 10. 媒体商店。获取所有图像
- webrtc - RTCPeerConnection 候选者没有有效的 IPV4 地址,而是其中有一些 .local 地址