저는 React/Redux에서 새롭게 변경했습니다. redux에서 상태를 업데이트하는 더 나은 방법은 무엇인지 알아내는 데 도움이 될까요? 내 감속기 또는 많은 경우에 일련의 동작을 호출하고 상태를 관리 할 수 있습니다. 반응 구성 요소에서 상태를 관리하고 감속기 하나에서만 상태를 업데이트하기 위해 하나의 동작 만 호출 할 수 있습니다.redux에서 상태를 업데이트하는 더 나은 방법은 무엇입니까?
// Option #1
const reducer = (state = {items: [], counter: 0, someAnotherData: {}}, action) => {
switch (action.type) {
case ADD_ITEM: {
const updatedItems = state.items.concat(action.payload);
return Object.assign({}, state, {items: updatedItems});
}
case REMOVE_ITEM: {
const updatedItems = state.items.filter(e => e.id !== action.payload);
return Object.assign({}, state, {items: updatedItems});
}
}
// cases for counter and someAnotherData
};
// component
render() {
// ...
<Button onClick={() => dispatch({type: 'ADD_ITEM', payload: item})}>
Add
</Button>
<Button onClick={() => dispatch({type: 'REMOVE_ITEM', payload: id})}>
Remove
</Button>
{...}
}
// Option #2
const reducer = (state = {items: [], counter: 0, someAnotherData: {}}, action) => {
switch (action.type) {
case 'UPDATE_DATA':
return Object.assign({}, state, action.payload);
// no more cases
default:
return state;
}
};
// component
addItem = (item) => {
const updatedItems = this.props.items.concat(item);
this.props.dispatch({type: 'UPDATE_DATA', payload: {items: updatedItems}});
}
removeItem = (id) => {
const updatedItems = this.props.items.filter(e => e.id !== id);
this.props.dispatch({type: 'UPDATE_DATA', payload: {items: updatedItems}});
}
render() {
// ...
<Button onClick={() => this.addItem(item)}>
ADD
</Button>
<Button onClick={() => this.removeItem(id)}>
REMOVE
</Button>
{...}
}
는 나를 위해 옵션 # 2 나는 동일한 파일에 무슨 일이 일어나고 있는지 볼 수있는 더 나은 것 같다,하지만 난이 올바른 방법입니다 확실하지 않다.
는export default connect(mapStateToProps, mapActionsToProps)(ComponentName);
그런 다음 구성 요소는 소품을 사용할 수있다 : 두 번째 PARAM로
function mapActionsToProps(dispatch) {
return {
actionCreator1:() => dispatch(updateDataAC())
};
}
패스이 다음과 같이 저장하는 구성 요소를 연결하는 동안 다음과 같이
답장을 보내 주셔서 감사합니다. 나는 내 문제를 더 잘 설명해야한다. 내가 어디에 추가/제거 데이터 등 논리 :하지만 감속기 또는 반응 구성 요소에 의미합니까? 두 번째 옵션에서는 하나의 액션 "UPDATE_DATA"(예, 맞습니다. ActionCreators로 구현할 수있는 액션) 만 처리하고 반응 컴포넌트에서는 데이터를 추가/제거합니다. 이 접근법에는 함정이 있습니까? –
동일한 논리를 여러 곳에서 재사용 할 수 있으므로 반응 구성 요소가 아닌 감속기의 저장소 내용을 조작해야합니다. 따라서 구성 요소와 독립적으로 유지하는 것이 좋습니다. –