이미 사용중인 것은 Redux로 구현 한 중앙 집중식 상태입니다.
아마도 React Baobab을 사용하면 구현이 명확 해 지므로 다시 렌더링해야하는 구성 요소 만 다시 렌더링됩니다.
참고 : 데모를 위해 모달을 사용하는 많은 구성 요소와 작동하지 않는 하나의 "isOpened"속성으로 작업하고 있습니다. 이 경우 다른 상태를 추가해야합니다. 예를 들어, 열려는 모달의 ID와이 ID가 설정되었는지 (SomeComponent에서) 확인해야합니다.
모달 :
import React from "react";
export default class Modal extends React.Component {
render() {
return (
<div className="myModal"></div>
);
}
}
SomeComponent :
import React from "react";
import { branch as BaobabBranch } from "baobab-react/higher-order";
import PropTypes from "prop-types";
import { openModal } from "./actions/Modal";
@BaobabBranch({
modal: ["modal"]
})
export default class SomeComponent extends React.Component {
static propTypes = {
dispatch: PropTypes.func.isRequired,
modal: PropTypes.object.isRequired
}
onOpenModal() {
this.props.dispatch(openModal);
}
render() {
return (
<div className="someComponent">
{ this.props.modal.isOpened ?
<Modal />
:
<div class="content" onClick={::this.onOpenModal}></div>
}
</div>
);
}
}
행동/모달 :
export const openModal = state => {
state.select("modal").set(Object.assign({}, state.get("modal"), {
isOpened: true
}));
};
상태 :
import Baobab from "baobab";
const state = new Baobab({
modal: {
isOpened: false,
content: "someContent"
}
});
간략한 설명 :
상태는 위의 값으로 초기화되는 전역 상태를 유지합니다. SomeComponent의 content div를 클릭하면 openModal 액션이 실행됩니다. 모든 동작의 첫 번째 인수는 항상 상태 자체입니다. 상태 값이 변경되면 (@BaobabBranch를 사용하여) 모든 청취 구성 요소가 새 소품에 대해 알리고 다시 대여합니다.
다른 구성 요소를 추가하면 모달 값도들을 수 있습니다. 이를 통해 모달 처리를 중앙 집중화하고 레이어 사이에 값을 버블 링하지 않도록하는 데 필요한 모든 것이 있습니다.
구성 요소가 문제를 업데이트해야하는 이유는 무엇입니까? 구체적인 예를 들어 좀 더 자세히 설명해 주시겠습니까? –
@DanielZuzevich 물론입니다. modal 구성 요소 중 하나는'input' 필드를 포함했기 때문에,이 필드에 문자를 입력 할 때마다'component' 상태를 업데이트하기 위해 Redux 호출을 만들어야했습니다. – topic
입력 값이 변경되면 구성 요소가 업데이트되고 모달이 닫히는 것을 말하고 있습니까? –