2017-05-19 9 views
1

私は現在、reactとreduxを使って私の最初のアプリを構築しています。フィルターをいくつか作成し、ユーザーがフィルターを選択すると、ストアを新しいフィルター値で更新し、新しい結果を要求します。React/Reduxが更新するまで待つ

ストアは新しいフィルタ値で更新されていますが、ストアの更新が完了する前にフェッチ要求が行われているため、誤った値が返されます。

フェッチ要求を行う前にストアが更新されるのを待つ方法はありますか? `dataFilter:状態&&状態を

以下

私のコードがある...

const mapStateToProps = (state) => { 
    return { 
     dataFilter: state.dataFilter 
    } 
}; 

class Filters extends Component { 
constructor(props){ 
    super(props); 
    this.handleChange = this.handleChange.bind(this); 
} 

handleChange(value, dispatcher){ 
    dispatcher(value.props["data-attr"]); 

    this.props.resultsFetchData('/api/deals/?data=' + this.props.dataFilter); 
} 

render() { 
    const dataFilters = { 
     0: <span data-attr="0">Any</span>, 
     20: <span data-attr="1">1GB+</span>, 
     40: <span data-attr="2">2GB+</span>, 
     60: <span data-attr="5">5GB+</span>, 
     80: <span data-attr="10">10GB+</span>, 
     100: <span data-attr="99.99">Unltd</span> 
    }; 

    return (
     <div className="filters"> 
      <div className="row"> 
       <div className="col-sm-4 filters--slider"> 
        <Slider 
         min={0} 
         marks={dataFilters} 
         step={null} 
         defaultValue={this.props.dataFilter} 
         onChange={e => {this.handleChange(dataFilters[e], this.props.setDataFilter)}} /> 
       </div> 
      </div> 
     </div> 
     ); 
    } 
} 

export default connect(mapStateToProps, {setDataFilter, resultsFetchData})(Filters) 

Filters.propTypes = { 
dataFilter: PropTypes.string 
} 
+0

あなたはmapStateToPropsにチェックを追加することができます...私のためのソリューションとして働いていました。 dataFilter? state.dataFilter || anyDefaultValue'です。 'handleChange()'では、if文を追加して、propが有効かどうかをチェックすることができます。 –

+1

またはフェッチ呼び出しをcomponentWillReceivePropsメソッドに移動することができます – Borjante

+0

フェッチをcomponentWillReceivePropsに移動しようとしましたが、あまりにも多くの接続からのエラーが発生するまでAPI呼び出しを継続します。 – Phil

答えて

1

使用componentWillReceivePropsは

componentWillReceiveProps(nextProps){ 
    if(nextProps.dataFilter !== this.props.dataFilter){ 
     this.props.resultsFetchData('/api/deals/?data=' + nextProps.dataFilter); 
    } 
} 

handleChange(value, dispatcher){ 
    dispatcher(value.props["data-attr"]); 
} 
関連する問題