私はあなたがこれを処理するためにFluxアーキテクチャを実装することで最も効果的だと思います。 Reduxは良いフィット感です。
ツアー進行のためのRedux Reducerを作成します。この減速器の状態は、ユーザーがいるツアーの現在のステップに対応するキーでなければなりません。
ツアーに使用されるすべてのコンポーネントは、このツアー状態に小道具としてアクセスする必要があります。この小道具を使用して機能を判断します。私。関連するコンポーネント内で、コードをこのように表示することができます。
openModal(){
if(this.props.tourStep == 'prompt_modal_open'){
ActionCreator.progressTourStep();
}
// code for actually opening the modal goes here
},
someOtherAction(){
if(this.props.tourStep == 'prompt_modal_open'){
//Display error message here
} else {
//normal action result here
}
}
ユーザーがツアーに参加されていない場合は、単にundefined
に減速してtourStep
を設定し、任意のツアー関連の機能がオフになります。
また、コンポーネントをクリーンでダムにしておきたい場合は、このロジックをRedux-Thunkの助けを借りてアクションクリエータに直接入れることができます。
ActionCreator.openModal = function(){
return function(dispatch, getState){
var state = getState();
if(state.tourStep == 'prompt_modal_open'){
dispatch({type: 'progress_tour_step'});
}
dispatch({type: 'open_modal'});
}
}
ActionCreator.someOtherAction = function(){
return function(dispatch, getState){
var state = getState();
if(state.tourStep != undefined){
dispatch({type: 'show_error'});
} else {
dispatch({type: 'some_other_action_type'});
}
}
}
[カスタム要素](https://developer.mozilla.org/en-US/docs/Web/Web_Components/Custom_Elements)はどうですか? – Oriol
このタスクの範囲については、既存のhtml要素のみを考慮しています。「カスタム要素」とは、要素がHTMLElement.prototypeに貼り付けられていることを前提としていますか? – user3457884
「insertBefore」、「appendChild」、「removeChild」などのDOMメソッドをハイジャックする可能性があります。 – Oriol