많은 편집 가능한 값 (* 큰 값> 1000)을 가진 큰 json을 다루고 있으며, 완전히 같은 페이지에 렌더링되어 있으므로 내 상태는 간단하게 { data: bigBigJson }
입니다.큰 상태의 React/Redux 퍼포먼스
초기 렌더링은 꽤 길지만 괜찮습니다.
입력이 onChange
(및 redux 동작)을 트리거하면 값이 상태에서 업데이트되고 전체 렌더링이 다시 발생한다는 점이 문제입니다.
사람들이 어떻게 대처하는지 궁금하네요. 간단한 솔루션이 있습니까 (모범 사례는 아님).
주 :
는 JSON 문서가 외부 API에서 제공, 나는 그것을 변경할 수 없습니다
I 수 여러 개의 하위 상태의 상태가 (이 복수의 분리 수준 json),하지만 간단하고/빠른 솔루션을 기대하고있다. (아마도 최선의 방법이 될 것이다.)
나는 immutable.js가 아니라 react와 redux를 사용하고 있지만 모든 것이 불변이다. - 명백하게)
(의이 상태가 있다고 가정 해 봅시다
• (사례 1)) DSS 답변에 대한
업데이트 : keyN
이 업데이트
{
data: {
key1: value1,
// ...
key1000: value1000
}
}
경우 모든 어쨌든 상태는 다시 렌더링 될 것입니까? 감속기는 다음과 같이 반환합니다.
{
data: {
...state.data,
keyN: newValueN
}
그건 한 가지지만 사실은 그렇지 않습니다.
• (사례 2) 상태는 이상 (간체 이상)과 같다 : dataN.keyN
가 업데이트
{
data: {
dataSet1: {
key1: value1,
// ...
key10: value1000
},
// ...
dataSet100: {
key1: value1,
// ...
key10: value1000
}
}
}
경우에, 나는 감속기
{
data: {
...state.data,
dataN: {
...state.data.dataN,
keyN: newValueN
}
}
}
나는 내가 뭘 생각에 반환 정말 좋지 않은 뭔가 잘못되었습니다. 은 그렇게 아무것도 바꿀 것 :
// state
{
dataSet1: {
key1: value1,
// ...
key10: value1000
},
// ...
dataSet100: {
key1: value1,
// ...
key10: value1000
}
}
// reducer
{
...state,
dataN: {
...state.dataN,
keyN: newValueN
}
}
을 마지막으로 내 감속기 (간체 여전히 비트)의 모양 여기 더, 내 경우에 대한 자세한 구체적으로 :
import get from 'lodash/fp/get'
import set from 'lodash/fp/set'
// ...
// reducer:
// path = 'values[3].values[4].values[0]'
return {
data: set(path, {
...get(path, state.data),
value: newValue
}, state.data)
}
에서 • 경우 당신은 그냥 사용할 수 없습니다 궁금해 : 다른 속성으로
data: set(path + '.value', newValue, state.data)
도 업데이트해야합니다.
"keyN이 업데이트되면 모든 상태가 다시 렌더링됩니다. 감속기가"같은 답을 반환합니다. 대답은 : 아니요. keyN 만 다시 렌더링됩니다. _other_ 항목을 렌더링하는 구성 요소는 (React-Redux가 수행하는) 객체 참조가 (해당 키에 대해) 동일하다는 것을 알게되고 렌더링을 건너 뜁니다. – DDS
모든 값이 동일한 반응 구성 요소에서 사용/렌더링되는 경우 (단 하나의'render() '에서)? 유일한 방법은이를 더 작은 하위 구성 요소로 분리하는 것입니다. (동적으로 생성되고'.connect()'될 것입니다) – Cohars
당신이 잘하고있는 것처럼 보입니다 (적어도'{ ... 상태, 데이터 N : { ... state.dataN, keyN : newValueN } }'lodash fp에는 익숙하지 않습니다. 연결된 구성 요소 각각에 알림이 전달되므로 많은 구성 요소를 사용하면 작업 속도가 느려집니다. 이것은 빠르지 만 빨리 끝내더라도 많은 일을하는 것이 합쳐집니다. 당신이 처리 할 수있는 한가지는 객체 키가 반복 될 수 있기 전에 매번 가져와야한다는 것입니다. 이것은 시간이 걸립니다. 데이터 오브젝트 (키순)와 함께 상태에 키를 저장하는 것이 더 나을 수도 있습니다. – DDS