0
例Redux的樹接觸亞當在朋友組:終極版:在第一減速器添加值,然後將新創建的值傳遞給第二減速
{
groups: {
1: {
name: "Friends"
contacts: [1]
}
}
contacts: {
1: {
name: "Adam"
}
}
}
現在我想創建在朋友組,結果一個新的聯繫人會是這樣的:
{
groups: {
1: {
name: "Friends"
contacts: [1, 2]
}
}
contacts: {
1: {
name: "Adam"
},
2: {
name: "Bethany"
}
}
}
目前我正在創建新的聯繫人ID,然後對兩個reducer運行redux操作。然而,這感覺真的很混亂,有沒有更好的方式去做到這一點?我當前的代碼是下面:
contact.js
import { connect } from 'react-redux';
function Contact({ createContact, groupId, newContactId }) {
function onContactCreate(name) {
createContact(newContactId, groupId, name);
}
// ...
}
const mapStateToProps = (state) => {
return {
newContactId: state.get('contacts').size + 1
};
};
export function mapDispatchToProps(dispatch) {
return {
createContact: (newContactId, groupId, name) => dispatch({
type: 'CREATE_CONTACT',
newContactId,
groupId,
name
})
};
}
export default connect(mapStateToProps, mapDispatchToProps)(Contact);
接觸reducer.js
import { fromJS } from 'immutable';
const initialState = fromJS({});
function contactReducer(state = initialState, action) {
switch (action.type) {
case 'CREATE_CONTACT': {
return state
.set(action.id, fromJS({
name: action.name
}));
}
default:
return state;
}
}
export default contactReducer;
基reducer.js
import { fromJS } from 'immutable';
const initialState = fromJS({});
function groupReducer(state = initialState, action) {
switch (action.type) {
case 'CREATE_CONTACT': {
let id = action.groupId;
return state
.updateIn([id, 'contacts'], (contacts) => contacts.push(action.id));
}
default:
return state;
}
}
export default groupReducer;
所以我現在這樣做的方式是「好」? – joshhunt
是的,你在做的事似乎對我很好。 – DDS
你是否能夠進一步解釋這一點「一般來說,對象的身份應該綁定到對象而不是單獨創建。」?我真的不明白這意味着什麼。 – joshhunt