如何将我的初始状态用于我的reducer文件中?

时间:2018-08-08 13:47:36

标签: javascript reactjs debugging redux react-redux

每当用户单击<Button/>时,它将在数据库中存储为FIRST_PERSON_CHOSEN

代替somebody(根据reducer.js文件)。

我想使用initialState文件中的reducer.js,因为到目前为止,它甚至可能根本不在,它什么也没做。

Main.js内部,保存personPlacedInFirebase()的{​​{1}}函数正在触发() => this.firstPersonChosen()而不是FIRST_PERSON_CHOSEN

我如何做到这一点?如果需要其他信息,请告诉我,我将其发布。

这是我的somebody文件:

Main.js

这是我的import React, { Component } from 'react'; import { connect } from 'react-redux'; import Modal from 'react-modal'; import Aux from '../../../../hoc/Aux'; import Button from '../Buttons/Button'; import CheckoutButton from '../../../../components/UI/buttons/CheckoutButton/CheckoutButton'; import { FIRST_PERSON_CHOSEN } from "../../../../store/action/PersonChosenAction"; import { CLOSE_MODAL, OPEN_MODAL } from "../../../../store/action/NoNameAction"; class Main extends Component { componentWillMount() { Modal.setAppElement('body'); } personPlacedInFirebase() { axios.post('./chosen.json', this.props.firstPersonChosen()) .then(response => { console.log("person placed check firebase"); }).catch(error => { console.log(error); }) } render() { return ( <Aux> <Button clicked={() => this.personPlacedInFirebase()} label={"This button"}/> <CheckoutButton clicked={() => this.props.openModalRedux()}/> <Modal isOpen={this.props.isOpen}> <p>{this.props.thisButtonChosen}</p> <button onClick={() => this.props.closeModalRedux()}>Close</button> </Modal> </Aux> ); } } const mapStateToProps = state => { return { isOpen: state.global.isModalOpen, clicked: state.personChosen.differentPeople } }; const mapDispatchToProps = dispatch => { return { firstPersonChosen: () => dispatch({type: FIRST_PERSON_CHOSEN}), // Modal handlers openModalRedux: () => dispatch({type: OPEN_MODAL}), closeModalRedux: () => dispatch({type: CLOSE_MODAL}) } }; 文件:

reducer.js

1 个答案:

答案 0 :(得分:0)

如果您在这一行中注意到

axios.post('./chosen.json', this.props.firstPersonChosen()) 

第二个参数,即调度动作的调用

this.props.firstPersonChosen() 

不会返回您的对象,它只会将操作分派给reducer。

所以在

let name = 'somebody';
axios.post('...url',{name}) 

您应该显式传递要保存在数据库中的值,并在成功后将操作分派给reducer。如果要更新应用程序状态,也可以传递名称。

.then(response => this.props.firstPersonChosen(name)) 

如果将名称param传递给firstPersonChosen,请在mapDispatchToProps中更新其定义,这样它将接受名称作为param并可以进一步传递给reducer。

注意:您也可以像存储常量一样将缩写保存在公共文件中。这样初始状态就可以重用。