javascript 将本地状态与Redux相结合
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了javascript 将本地状态与Redux相结合相关的知识,希望对你有一定的参考价值。
import * as actionTypes from './actions';
const initialState = {
persons: []
};
const reducer = ( state = initialState, action ) => {
switch ( action.type ) {
case actionTypes.ADD_PERSON:
const newPerson = {
id: Math.random(), // not really unique but good enough here!
name: action.personData.name,
age: action.personData.age
}
return {
...state,
persons: state.persons.concat( newPerson )
}
case actionTypes.REMOVE_PERSON:
return {
...state,
persons: state.persons.filter(person => person.id !== action.personId)
}
}
return state;
};
export default reducer;
import React, { Component } from 'react';
import { connect } from 'react-redux';
import Person from '../components/Person/Person';
import AddPerson from '../components/AddPerson/AddPerson';
import * as actionTypes from '../store/actions';
class Persons extends Component {
render () {
return (
<div>
<AddPerson personAdded={this.props.onAddedPerson} />
{this.props.prs.map(person => (
<Person
key={person.id}
name={person.name}
age={person.age}
clicked={() => this.props.onRemovedPerson(person.id)}/>
))}
</div>
);
}
}
const mapStateToProps = state => {
return {
prs: state.persons
};
};
const mapDispatchToProps = dispatch => {
return {
onAddedPerson: (name, age) => dispatch({type: actionTypes.ADD_PERSON, personData: {name: name, age: age}}),
onRemovedPerson: (id) => dispatch({type: actionTypes.REMOVE_PERSON, personId: id})
}
};
export default connect(mapStateToProps, mapDispatchToProps)(Persons);
import React, { Component } from 'react';
import './AddPerson.css';
class AddPerson extends Component {
state = {
name: '',
age: ''
}
nameChangedHandler = (event) => {
this.setState({name: event.target.value});
}
ageChangedHandler = (event) => {
this.setState({age: event.target.value});
}
render () {
return (
<div className="AddPerson">
<input
type="text"
placeholder="Name"
onChange={this.nameChangedHandler}
value={this.state.name} />
<input
type="number"
placeholder="Age"
onChange={this.ageChangedHandler}
value={this.state.age} />
<button onClick={() => this.props.personAdded(this.state.name, this.state.age)}>Add Person</button>
</div>
);
}
}
export default AddPerson;
import React from 'react';
import './Person.css';
const person = (props) => (
<div className="Person" onClick={props.clicked}>
<h1>{props.name}</h1>
<p>Age: {props.age}</p>
</div>
);
export default person;
以上是关于javascript 将本地状态与Redux相结合的主要内容,如果未能解决你的问题,请参考以下文章
将 redux 嵌套状态更改持久化到本地存储
将 node.js 与本地服务器相结合
应用数据流状态管理框架Redux简介核心概念及工作流
redux状态管理和react的结合使用
Redux 和React 结合
理解Javascript的状态容器Redux