我在我的行動創造者進行異步調用,並與結果調用我的減速機,但由於某種原因,我無法摸清減速機沒有被調用。反應:行動的創造者不打電話減速機
actions.js(動作和動作的創造者)
export const GET_FORMS = 'GET_FORMS'
export function getForms() {
$.get("server url", function(result) {
return {
type: GET_FORMS,
formlist: result.data.forms
}
})
}
reducers.js
import { GET_FORMS } from '../actions/actions'
export default function formAction(state = {forms:[]}, action) {
console.log("received action"+action.type)
switch (action.type) {
case GET_FORMS:
console.log("Action:"+action);
return Object.assign({},state,{
forms:action.formlist
})
default:
return state
}
}
App.js
import React, { Component, PropTypes } from 'react'
import ReactDOM from 'react-dom';
import { bindActionCreators } from 'redux'
import { connect } from 'react-redux'
import auth from '../auth'
import FormTable from '../components/FormTable'
import * as FormActions from '../actions/actions'
class App extends Component {
constructor(props) {
super(props);
this.state = {forms: []};
}
componentDidMount() {
// for some reason if i write this.props.actions.getForms() i get an error
// Uncaught Error: Actions must be plain objects. Use custom middleware for
// async actions.
FormActions.getForms();
}
render() {
const {forms,actions} = this.props
console.log(forms);
return (
<FormTable results={forms} actions = {actions} />
)
}
}
App.PropTypes = {
forms: PropTypes.array.isRequired
}
function mapStateToProps() {
const {
forms:forms
} = {forms:[]}
return {
forms
}
}
function mapDispatchToProps(dispatch) {
return {
actions: bindActionCreators(FormActions, dispatch)
}
}
export default connect(
mapStateToProps,
mapDispatchToProps
)(App)
謝謝關於redux流程是如何工作的詳細解釋,我能夠讓reducer捕獲動作創建者的動作,並使用記錄器我可以驗證是否有狀態變化。但是在App.js的渲染方法中,forms/object仍然是空的。我在mapstatetoprops中做錯了什麼。 –
yes - mapStateToProps將始終返回一個空數組。你正在使用解構賦值,所以const {forms:forms} = {forms:[]};將永遠是形式= []。如果您使用的是連接,則需要指定您想要注入組件的全局狀態的哪一部分。你可以在這裏閱讀更多關於使用方法的文章:http://rackt.org/redux/docs/basics/UsageWithReact.html –
是的。我得知我沒有將表格映射到狀態,因此無法獲得更改。該鏈接幫助我將我的狀態映射到窗體並顯示在我的渲染方法中獲取數據。 –