Reactjs 使用redux响应本机axios api调用
我正在努力用React Native中的redux和axios设置一个基本的api调用 这是我的reducer index.jsReactjs 使用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
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=(数据)=>({
类型:总计数,
数据,
});代码>你似乎没有在任何地方调用你的操作。我应该在哪里调用它?