显示Axios-Response

时间:2017-09-06 14:07:06

标签: api reactjs redux react-redux axios

我想通过反应显示可能 api-call 的结果。我的api返回一个JSON对象:

0:{produkt_id: 1, produktname: "Bauernbrot", preis: "4"}
1:{produkt_id: 2, produktname: "Nussbrot", preis: "4.50"}
2:{produkt_id: 3, produktname: "Dinkelbrot", preis: "4.20"}

如果我的反应组件看起来像这样:

  constructor() {
    super();
    this.state = {
      bread: ' '
    };
  }

 componentDidMount(){
    axios
      .post('/api/produkte')
      .then((res)=> {
        console.log(res.data);
        this.setState(
          { bread: res.data.produkte[0].produktname }
        );
      })
      .catch((err)=> {})
  }
render(){
    return (
      <div>
        <h1>{this.state.bread}</h1>
      </div>
    );
}

当我使用Redux时,我想用redux-action发出请求。此操作应更新我的产品&#34;在我的redux商店中,我将在我的反应组件中显示。不幸的是,我无法正常工作。

这是我的行动:

import axios from 'axios';
import { GET_PRODUCTS } from './types';

export function setProducts(products) {
  return {
    type: GET_PRODUCTS,
    products
  };
}

export function updateProducts() {
  return (dispatch) => {
    return axios
    .post('/api/produkte')
    .then( res => {
      console.log(res);
      dispatch(setProducts(res.data.produkte[0].produktname));
    })
    .catch((err)=> {})
  }
}

我的减速机(在减速机中导入):

import {GET_PRODUCTS} from '../actions/types';

const initialState = {
  products: {}
};

export default (state=initialState,action = {}) => {
  switch(action.type){
    case GET_PRODUCTS:
      return {
        products: action.products
      }
    default: return state;
  }
}

如果我调用我的函数&#34; updateProducts()&#34;在我的react组件的构造函数中,我看不到在我的redux商店中执行的操作。 :(

2 个答案:

答案 0 :(得分:0)

import React from 'react';
import { connect } from 'react-redux';
import BestellForm from './BestellForm';
import { updateProducts } from '../../redux/actions/getProducts';

class BestellSeite extends React.Component {
  render() {
    return (
      <BestellForm updateProducts={updateProducts}/>
    );
  }
}

export default connect (null, { updateProducts })(BestellSeite);

import React, { Component } from 'react';
import './bestellSeite.css';
import moment from 'moment';
import axios from 'axios';

export default class BestellForm extends Component {

  constructor() {
    super();
    this.state = {
      bread: ' '
    };
  }
  componentWillMount() {
    this.props.updateProducts();
  }

}

答案 1 :(得分:0)

  componentWillMount() {
    this.props.dispatch(updateProducts());
  }

做了这个伎俩