const initState = {mode:'hello',
selected_id:null,
contents:[
{id:1, title:'stack', desc:'stack is ...'},
{id:2, title:'overflow', desc:'overflow is ...'}
]
}let newState = {};
if(action.type === 'CREATE'){
const newContents = {...state.contents};
const newContent = {id:3, title:'stack-overflow', desc:'stack-overflow is ...};
newContents.push(newContent);
(… I have a Question about return value …)
(저는 리턴값에 대해 질문이 있습니다)
}-----------------------
- When I’m usually use redux,(제가 리덕스를 사용할때)
newState = {...state, {contents:newContents}}
is it alright?
이게 맞아요?
or,
아니면
newState_real = {...state, {contents:state.contents.concat()}, {contents:newContents} }
why do I ask you this,
내가 이것에 대해 왜 질문하냐면,
DESCRIPTION 1
const newState = {...state};
state === newState //false
state.contents === newState.contents //true
DESCRIPTION 2
const newState_ex = {...state, {contents:state.contents.concat()} };
state === newState_ex //false
state.contents === newState_ex.contents //false
for keeping immutable,
불변함을 유지하기 위해서
I think that DESCRIPTION 2 is alright
저는 2가 맞다고 생각해요
but, I used to use DESCRIPTION 1,
그런데 1번을 여태 사용해왔어요
in spite of using DESCRIPTION 1, I can do redux-devtool:timetravling
1번을 사용함에도 불구하고, 저는 리덕스데브툴의 타임트레블링도 사용가능했고요
What should I do?
어떻게 해야합니까?
다시 질문요약
-
리덕스를 사용함에 있어서 완전한 복제까지는 필요 없는 것이겠지요?
state.contetents.concat()까지 해야하나요? -
contents는 state와 반환될 newState이 둘다 참조하고 있어서
원복복제가 아니라 원본을 교체하고 있던데
이러면 나중에 문제가 되지 않을까요?(잘 몰라서 하는 말입니다)
( 왜 이렇게 생각하냐면, 리덕스는 불변성을 유지한다고 들어서…
object형 객체(contents)는 불변성이 안되고 참조만 하고 있더라고요
) -
return newState= {…state, {content:state.contents.concat()}, {contents:newContents}을 해서 얻는 이점과
그냥 {…state, {contents:newContents}을 통해서 얻는 이점은 어떻게 다른가요?
3번이 제일 핵심이 되겠네요!