2017-09-19 3 views
0

私はreduxフォームを使用して、そのフィールド結果を持つAPIにヒットするアクションクリエータにフィールドを渡そうとしています。結果は同じコンポーネントに戻され、検索入力フィールドの下に表示されます。ここでは、ここで自分の行動の作成者私のreduxフォームの結果を同じコンポーネント内でレンダリングしようとしました

export function getStock({ticker_symbol}){ 

    console.log(ticker_symbol) 
    return function(dispatch) { 
     axios.get(`https://www.alphavantage.co/query?function=TIME_SERIES_INTRADAY&symbol=${ticker_symbol}&interval=1min&apikey=5QP2C2R2YCZ71HDB&datatype=json`, { 
      headers: { authorization: localStorage.getItem('token')} 
     }) 
      .then(res => { 
       console.log(res.data["Time Series (1min)"]) 
       dispatch({ 
        type: GET_STOCK, 
        payload: res.data 
       }) 
      }).catch(res => { 
       dispatch(authError(res.error)) 
      }); 

    } 
} 

あり、ここで減速

import { 
    FETCH_MESSAGE, 
    GET_STOCK 
} from '../actions/types'; 

export default function(state = {}, action){ 
    switch(action.type) { 
     case FETCH_MESSAGE: 
     return {...state, message: action.payload}; 
     case GET_STOCK: 
     return {...state, stock: action.payload, 
          stockDataLoaded: false}; 
    } 

    return state; 
} 

あるフォームを持っており、レンダリング情報を取得するために想定されるコンポーネントです。コンソールのログが正しいデータを取得しています。ここで

import React, { Component } from 'react'; 
import { connect } from 'react-redux'; 
import { reduxForm } from 'redux-form'; 
import * as actions from '../actions'; 

class Feature extends Component{ 
    componentWillMount(){ 
     this.props.fetchMessage(); 

    } 
    handleFormSubmit({ ticker_symbol }){ 
     console.log(ticker_symbol); 
     this.props.getStock({ticker_symbol}); 
    } 
    render(){ 
     const { handleSubmit, fields: { ticker_symbol }} = this.props; 
     return (
    <div> 
     <form onSubmit={ handleSubmit(this.handleFormSubmit.bind(this))}> 
      <fieldset className="form-group"> 
       <label> Ticker Symbol: </label> 
       <input {...ticker_symbol} className="form-control" /> 
      </fieldset> 
      <button action="submit" className="btn btn-primary"> Get Quote </button> 
     </form> 
     <h1></h1> 
    </div> 
     ); 
    } 
} 

function mapStateToProps(state){ 
    console.log(state); 
    return { message: state.stock.message, 
    stock: state.stock.stock}; 
} 

export default reduxForm({ 
    form: 'getstock', 
    fields: ['ticker_symbol'] 
}, mapStateToProps, actions)(Feature); 

は、私は結果がティッカーシンボルあなたのコメントへの対応

+0

これはすべてうまく見えますが、どのような問題がありますか? – gravityplanx

+0

コンポーネントの空の

タグにstate.state.stockを入れようとするたびに、エラーが表示されます。結果が戻るまで状態がないので、私は推測する。私は若干還元されているので、わからない。 – jdip88

答えて

0

の下に表示させたいページ/コンソールのスクリーンショット

THE CONSOLE LOG SHOWS AFTER SEARCH IS SUCCESSFUL

です。

状態に依存するコンポーネントは、ライフサイクルフックgetInitialStateを使用して状態属性を初期化する必要があります。

単に状態オブジェクトを初期化する場合は完全に空にしておくか、デフォルトの開始値で設定することができます。

+0

'' ' componentWillMount(){ this.props.fetchMessage(); } '' ' コンポーネントの上に初期状態を取得しますか、その中に入れるのですか?私は少し周りにそれをジャグリングし、それでもそれを得ることはできません。 – jdip88

+0

'getInitialState'はライフサイクルフックです。 'componentWillMount'(これは別のライフサイクルフックです)と同じように、コンポーネントに適用する必要があります。それが他のフックの上か下であるかは関係ありませんが、確かに内部ではありません。 – gravityplanx

+0

申し訳ありませんが、私はwillmountの中にないwillmountを置き換えることを意味します。 state.stock.stockのmapStateToProps()を実行すると、私が探しているオブジェクトが取得されます。フォームが提出される前にそのアイテムは定義されていないか、存在しません。私はそれを初期状態にしてヌルに設定すると思いますか?私はそこに置くと確信しています。 – jdip88

関連する問題