2017-09-19 2 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); 

THE CONSOLE LOG SHOWS AFTER SEARCH IS SUCCESSFUL

나는 결과가 댓글에 응답 종목 기호

+0

이 모든 것이 잘 보입니다. 어떤 문제가 있습니까? – gravityplanx

+0

구성 요소의 빈

태그에 state.state.stock을 넣으려고 할 때마다 오류가 발생합니다. 결과가 돌아올 때까지 아무 상태도 없기 때문에 나는 추측한다. 나는 약간 새로운 것, 확실하지 않다. – jdip88

답변

0

아래에 표시 할 페이지/콘솔의 스크린 샷이다;

상태에 의존하는 모든 구성 요소는 getInitialState 라이프 사이클 후크를 사용하여 상태 속성을 초기화해야합니다.

getInitialState() { 
    return { 

    }; 
} 

상태 개체를 초기화하려는 경우 완전히 비워 두거나 기본 시작 값으로 채울 수 있습니다.

+0

''' componentWillMount() { this.props.fetchMessage(); ''' 내가 구성 요소 위에 마운트 초기 상태를 넣을까요, 아니면 그 안에 있습니까? 나는 그것을 약간 주위에 저글링했고, 아직도 그것을 기울인다. – jdip88

+0

'getInitialState'는 생명주기 후크입니다. 그것은 componentWillMount (다른 라이프 사이클 훅)와 같은 방식으로 컴포넌트에 적용되어야합니다. 그것이 다른 갈고리보다 위 또는 아래에 있는지는 관련성이 없지만 내부에는 없습니다. – gravityplanx

+0

죄송합니다. willmount 대신 willmount를 교체하십시오. 내가 state.stock.stock의 mapStateToProps()를 콘솔 할 때, 내가 찾고있는 객체를 얻는다. 양식이 제출되기 전에 해당 항목이 정의되지 않았거나 존재하지 않습니다. 나는 그것을 초기 상태로 만들고 null로 설정한다고 가정하고 있는가? 나는 내가 거기에 집어 넣을 것이라고 확신 할 수 없다. – jdip88

관련 문제