如何访问功能组件中的道具

时间:2018-09-30 12:56:36

标签: reactjs redux react-redux

我的组件有问题
当我使用道具时,我在所有队友中都得到相同的数据,但是在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}));
    });
  }
}

Action Odd data same results for odds

3 个答案:

答案 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}));

会依次通过化简器使用传播运算符转储为

状态。我认为您必须更改方法:

  1. 保持原样的getOdd操作
  2. 当您调用getOdd时,请将其用作{ type: "GET_ODD", odd: { odd: { /* data */} } } 。没有大括号。
  3. 减速器中的
  4. ,请勿对操作使用传播运算符。使用特定的密钥,例如:

    返回{     ...州,     奇数:action.odd }

  5. 您的异步操作看起来不错,只需在其中添加一个catch并添加一个console.error,以便您知道是否失败

您有2个问题。您可以使用React生命周期方法之一来比较当前道具和即将出现的下一个道具,然后执行该逻辑。

希望对您有帮助!