Reactjs 使用redux响应本机axios api调用

Reactjs 使用redux响应本机axios api调用,reactjs,react-native,redux,axios,redux-thunk,Reactjs,React Native,Redux,Axios,Redux Thunk,我正在努力用React Native中的redux和axios设置一个基本的api调用 这是我的reducer index.js import { combineReducers } from 'redux' import LibaryReducer from './LibraryReducer' import ImportLibraryReducer from './ImportLibraryReducer' let defaultState = { card: null } c

我正在努力用React Native中的redux和axios设置一个基本的api调用

这是我的reducer index.js

import { combineReducers } from 'redux'
import LibaryReducer from './LibraryReducer'
import ImportLibraryReducer from './ImportLibraryReducer'

let defaultState = {
    card: null
}


const mainReducer = (state = defaultState, action) => {
    if(action.type === "CHANGE_CARDS") {
        return {
            ...state,
            card: action.card
        }
    } else {
       return {
        ...state
       }
    }
}

export default mainReducer
这是我的action index.js

import axios from "axios"

export function loadCards(){
    return(dispatch)=>{
        return axios.get('http://localhost:4000/reports')
                .then(response => {
                    dispatch(changeCards(response.data))
                })
    }
}

export function changeCards(cards) {
    return{
        type: "CHANGE_CARDS",
        card: card
    }
}
这是我的app.js

/**
 * Sample React Native App
 * https://github.com/facebook/react-native
 *
 * @format
 * @flow
 */

import React, {Component} from 'react';
import {Platform, StyleSheet, Text, View} from 'react-native';
import MainPage from './components/MainPage'
import { Header } from "native-base"

import Card from './components/Card'

import { Provider } from 'react-redux'
import { createStore, applyMiddleware } from 'redux'
import thunk from 'redux-thunk'

import reducers from './reducers'

const store = createStore(reducers, applyMiddleware(thunk))

type Props = {};
export default class App extends Component<Props> {
  render() {
    return (
      <Provider store={store}>
        <View>
          <Header ><Text>hello</Text></Header>
          <Card />
        </View>
      </Provider>
    );
  }
}
/**
*示例React本机应用程序
* https://github.com/facebook/react-native
*
*@格式
*@flow
*/
从“React”导入React,{Component};
从“react native”导入{平台、样式表、文本、视图};
从“./components/MainPage”导入主页面
从“本机基”导入{Header}
从“./组件/卡”导入卡
从“react redux”导入{Provider}
从“redux”导入{createStore,applyMiddleware}
从“redux thunk”导入thunk
从“./还原程序”导入还原程序
const store=createStore(还原器、applyMiddleware(thunk))
类型Props={};
导出默认类应用程序扩展组件{
render(){
返回(
你好
);
}
}
最后,这是我试图从api调用中检索数据的地方:

import React, { Component } from 'react';
import { Text, View } from 'react-native';
import {Collapse,CollapseHeader, CollapseBody, AccordionList} from 'accordion-collapse-react-native';
import { connect } from 'react-redux'
import * as actions from '../actions'

class Card extends Component {



  render() {

    const titleStyle = {
      backgroundColor: '#edeeef',
      fontWeight: "bold",
      color: '#454647',
      fontSize: 16,
      left: 8,
      fontFamily: 'Ionicons',
      top: 10
    }

    const descMarkStyle = {
      left: 8,
      top: 4,
      fontFamily: 'Ionicons',
      color: '#454647',
      fontSize: 16
    }

    console.log('in the render', this.props)

    return (
      <View>
          <Collapse >
              <CollapseHeader>
                <View
                  style={{
                    backgroundColor: '#edeeef',
                    height: 38,
                    postion: 'absolute',
                    borderBottomWidth: .5,
                    borderBottomColor: '#black'
                  }} 
                >
                  <Text style={titleStyle}>
                   test
                  </Text>
                </View>

              </CollapseHeader>
              <CollapseBody>
                <Text style={descMarkStyle}>test</Text>
                <Text style={descMarkStyle}>test</Text>
              </CollapseBody>
            </Collapse>
      </View>
    );
  }
}

function mapStateToProps(state) {
  return {
    state
   };
 }

 export default connect(mapStateToProps)(Card);
import React,{Component}来自'React';
从“react native”导入{Text,View};
从“accordion Collapse react native”导入{Collapse,CollapseHeader,CollapseBody,AccordionList};
从“react redux”导入{connect}
将*作为操作从“../actions”导入
类卡扩展组件{
render(){
常数标题样式={
背景颜色:“#edeef”,
fontWeight:“粗体”,
颜色:“#454647”,
尺寸:16,
左:8,,
fontFamily:“Ionicons”,
前10名
}
常量descMarkStyle={
左:8,,
排名:4,
fontFamily:“Ionicons”,
颜色:“#454647”,
字体大小:16
}
console.log('in the render',this.props)
返回(
测试
测试
测试
);
}
}
函数MapStateTops(状态){
返回{
状态
};
}
导出默认连接(MapStateTops)(卡);
当我尝试在上面的组件中控制台记录this.props时,我会得到默认状态card:null,而不运行api:


我是redux新手,我觉得我缺少了一些明显的东西。

您应该在
组件中的
组件didmount
生命周期方法中触发您的操作。此外,您还可以在导入和连接中分解操作

import { loadCards } from '../actions'

class Card extends Component {

componentDidMount() {
  this.props.loadCards()
}
并在
连接中

export default connect(mapStateToProps, { loadCards })(Card);
更改卡片
操作中:

card: cards

以下是如何使用redux挂钩设置axios,并通过4个步骤进行本地反应:

源代码:

第1步:

创建actions.js文件:

actions.js

export const TOTAL\u COUNT=“TOTAL\u COUNT”;
导出常量totalCount=(数据)=>({
类型:总计数,
数据,

});你似乎没有在任何地方调用你的操作。我应该在哪里调用它?