특별한 경우에 REDUX 상태를 관리하기위한 내가 가장 좋은 연습 방법을 찾고 있어요 : 나는 콘텐츠 편집기로 편집 게시물에 대한 응용 프로그램을redux 상태를 적절하게 관리하는 방법은 무엇입니까?
는 응용 프로그램 상태는 다음과 같습니다
{
posts: [
{
id: 123,
blocks: [
{
setting1: 'fuzz',
setting2: 'bar',
...
}
],
...
},
...
],
activeBlock: {
setting1: 'fuzz',
setting2: 'bar',
...
}
}
그것은 사실입니다 내가 가고 싶은 국가의 구조. 나는 다음과 같은 구조를 가지고이 때
:{
posts: [
{
id: 123,
activeBlockIndex: 0,
blocks: [
{
setting1: 'fuzz',
setting2: 'bar',
...
}
],
...
},
...
]
}
그리고 나는 게시물 및 콘텐츠 블록에 대한 하나의 공통 감속기 있습니다. 그리고 Content Editor
구성 요소가 매우 복잡하고 많은 요소가 하위 구성 요소로 깊숙이 들어가 있습니다. 괜찮아 보이고 작동하는 것 같습니다. 하지만 문제가 있습니다. 게시물에 대한 많은 정보를 Content Editor
의 구성 요소 (예 : postId, blockIndex)에 지정해야합니다. 나는 그것이 좋지 않다고 생각한다. 왜냐하면 콘텐츠가 어디에 저장 되더라도 내용을 편집하는 것의 주된 책임이기 때문이다.
Content Editor
의 구성 요소에는 state.activeBlock
및 게시물 관리를위한 기타 구성 요소 및 state.posts
의 경우에만 참조가 포함될 수 있도록 내 앱을 리팩터링하려고합니다. (질문에 구조의 첫 번째 변종)
다른 말로하면, 환원 레벨 (또는 다른 곳에서는 모르겠다)에서 state.posts
으로 상태의 state.activeBlock
분기를 찾을 수있는 방법을 찾고 있습니다.
정말 감사드립니다.
Btw, 내가 말하고자하는 것이 분명할까요? 또는 질문을보다 자세하게 다시 작성해야합니까?
예, 이미 combineReducers를 사용하고 있습니다. mapStateToProps에 대해 언급 해 주셔서 감사합니다. mapStateToProps 함수 안에 전체 저장소 객체에 대한 액세스 권한이 있다는 것을 잊었습니다. 하지만 확실하지 않습니다. 여기 동기화 기능을 수행하는 것이 좋습니다. – milushov
'mapStateToProps'는 상태를 구성 요소에만 연결하고 상태를 전혀 설정하지 않습니다. _move_set1, set2 등을'activeBlock'으로 옮기고 싶지 않다면, 중복 된 상태를 가질 이유가 없습니다. 여러분은 Reducer의'state.posts'에있는 활성 게시물에 대해'active : true'를 설정 한 다음 ContentEditor 컴포넌트의'mapStateToProps'에'let activePost = state.posts.filter (post => post.active) [ 0]; return {post : activePost}'. 그러면 ContentEditor의'post' 소품이 활성 게시물로 설정되고 설정이 제공됩니다. – inostia
사용자는 URL에서 편집중인 게시물의 'id'를 갖게되며 ID로'posts'를 필터링 할 수 있습니다. – inostia