onTouchStartによるキータッチイベントを検出するタッチ動作のHOCを想像してください。これで、タッチHOCを使用してラップされたコンポーネントは、独自のハンドラロジックを持ちます。私のHOCコンポーネントは、ラップされたコンポーネントハンドラ関数をどのように呼び出すことができますか?HOCからラップされたコンポーネント関数へのアクセス
アイデアを得るために、ここに私が必要なものがあります。調査の結果、refを使用してターゲットコンポーネントを呼び出すthisが見つかりました。私はこれを達成するより良い方法があるのだろうかと思っていました。
TouchBehavior HOC
const TouchBehavior = (WrappedComponent) =>
class extends React.Component {
constructor(props) {
super(props);
this.state = {
active: false,
};
this.handleAction = this.handleAction.bind(this);
this.setActiveState = this.setActiveState.bind(this);
this.resetActiveState = this.resetActiveState.bind(this);
}
handleAction(e) {
e.preventDefault();
this.setActiveState();
//call wrapped component specific handler logic here
_.delay(() => this.resetActiveState() , 150);
}
setActiveState() {
this.setState ({
active: true
});
}
resetActiveState() {
this.setState ({
active: false
});
}
render() {
let touchBehaviorProps = {
onTouchStart: this.handleAction
};
return <WrappedComponent {...this.props} touchBehaviorProps={touchBehaviorProps} />
}
};
包まれたコンポーネントは
class Button extends React.Component {
componentSpecificHandlerLogic(){
//logic goes here
}
render() {
return <button {..this.props.touchBehaviorProps}></button>
}
}
代わりに呼び出すコールバックのラップコンポーネントは、コンポーネントの小道具としてのタッチ状態を送信することができます。これにより、ラップされたコンポーネントは、どのような方法でもタッチ状態に反応します。これはステートレスコンポーネントでも機能します。 – hazardous