我的组件有问题
当我使用道具时,我在所有队友中都得到相同的数据,但是在GET_ODD
中,动作数据是不同的
1)现在我该如何解决这个问题?
2)我如何设置间隔的奇数变化? if this.props.odd.ad_time < nextProps.odd.ad_time
更改curnet道具的奇数
json数据: {
"id": "24854545",
"home_od": "1.002",
"draw_od": "51.000",
"away_od": "51.000",
"ss": "3-1",
"time_str": "87",
"add_time": "1537706413"
减速器:
const initialState = {
odd: {}
};
function Markets(state = initialState, action) {
switch (action.type) {
case GET_ODD:
return {
...state,
...action.odd
};
default:
return state;
}
}
export default Markets
市场行为:
var marketsRESTRepository = new MarketsRESTRepository();
export const GET_ODD = "GET_ODD";
export function getOdd(odd) {
return {
type: GET_ODD,
odd
}
}
export function getAsyncOdd(eventId) {
return function (dispatch) {
marketsRESTRepository.getById(eventId).then(odd => {
dispatch(getOdd({odd}));
});
}
}
答案 0 :(得分:0)
问题似乎出在您的减速器上,
您为什么要宣传行动?由于您是通过这种方式访问的,
<span>{this.props.odd.home_od}</span>
将其更改为此,
return {
...state,
add : action.odd
};
答案 1 :(得分:0)
在市场部分尝试此:
import React, { Component } from "react";
import { connect } from 'react-redux';
import { getAsyncOdd } from "../../actions/markets.actions";
export class Markets extends Component {
constructor(props) {
super(props);
this.state = {
odds: {}
};
}
componentDidMount(){
this.props.getOdd(this.props.eventId);
this.setState({this.props.odd})
}
componentWillRecieveProps(nextProps) {
if(this.state.odds!==nextprops.odd){
this.setState({odds: nextprops.odd})
}
}
render() {
return (
<React.Fragment>
<span>{this.state.odds.home_od}</span>
<span>{this.state.odds.draw_od}</span>
<span>{this.state.odds.away_od}</span>
</React.Fragment>
);
}
}
function mapStateToProps({ markets }) {
return {
odd: markets.odd
}
}
function mapDispatchToProps(dispatch) {
return {
getOdd: (eventId) => dispatch(getAsyncOdd(eventId))
}
}
export default connect(mapStateToProps,
mapDispatchToProps
)(Markets)
答案 2 :(得分:0)
你有这个:
requestFeature()
和getOdd同步操作将返回此对象:
dispatch(getOdd({odd}));
会依次通过化简器使用传播运算符转储为
状态。我认为您必须更改方法:
{
type: "GET_ODD",
odd: {
odd: { /* data */}
}
}
。没有大括号。,请勿对操作使用传播运算符。使用特定的密钥,例如:
返回{ ...州, 奇数:action.odd }
您的异步操作看起来不错,只需在其中添加一个catch并添加一个console.error,以便您知道是否失败
您有2个问题。您可以使用React生命周期方法之一来比较当前道具和即将出现的下一个道具,然后执行该逻辑。
希望对您有帮助!