我一直在寻找更新Redux状态的正确方法。
当前我正在做的就是这样调用我的redux动作
import {fetchCoin, updateCrypto} from "../actions/cryptoAction.js"
componentDidMount() {
this.socket = openSocket('https://coincap.io');
this.props.fetchCoin()
}
然后这样称呼
const mapStateToProps = state => {
return {
cryptoLoaded: state.posts.itemsSucess,
cryptoLoading: state.posts.itemsFetching,
}
};
export default connect(mapStateToProps, {fetchCoin, updateCrypto, CurrencyRate})(cryptoTicker);
接着在componentDidUpdate
updateCoinData = [...this.props.cryptoLoaded];
this.setState({updateCoinData: true})
}
this.socket.on('trades', (tradeMsg) => {
for (let i=0; i< updateCoinData.length; i++) {
if (updateCoinData[i]["short"] == tradeMsg.coin ) {
updateCoinData[i]["price"] = tradeMsg['message']['msg']['price']
this.props.updateCrypto(updateCoinData);
我的更新操作就是这样
export const updateCrypto = (updatedData) => {
return function (dispatch) {
dispatch({
type: UPDATE_CRYPTO_DATA,
payload: updatedData
})
}
}
在reducer中,我存储成功状态的地方是我更改新值的地方
case CRYPTO_FETCH_SUCESS:
return {
...state,
itemsSucess: action.payload,
itemsFetching: false
}
case UPDATE_CRYPTO_DATA:
return {
...state,
itemsSucess: action.payload,
itemsFetching: false
}
现在,虽然此更新,但是有人告诉我我正在滥用Redux,并且无法正确更新我的状态。那么可以告诉我,这种实际上不正确的方法来更新redux状态吗?如果不是这样的话,理想的方法应该是什么?