私はFacebookのReactJSとReact-nativeに関する初心者ですから、 how to share code between Android and iOSというチュートリアルの助けを借りてコーディングを始めました。HOCからコンポーネントへの機能を渡す(React、React native)
このチュートリアルの後半では、状態を切り替えるボタンが実装されています。 残念ながら、これはmixinで作られています。私はHOCコンポーネントでそれをやりたい。上記のミックスインの
オリジナルミックスイン
export default {
getInitialState() {
return {
pressed: false
}
},
handlePress() {
this.setState({pressed: !this.state.pressed});
}
}
オリジナルコール
{ ...
render() {
const buttonStyle = [styles.button];
if (this.state.pressed) buttonStyle.push(styles.buttonPress);
return (
<TouchableOpacity onPress={this.handlePress.bind(this)} style={buttonStyle}>
<Text style={styles.text}>{this.props.text}</Text>
</TouchableOpacity>
)
}
}
reactMixin.onClass(Button, ButtonCommon);
export default Button;
マイHOC
export var ButtonComp = (ComposedComponent) => class extends Component {
constructor(props) {
super(props);
this.state = {pressed: false};
}
handlePress() {
this.setState({pressed: !this.state.pressed});
}
render() {
return <ComposedComponent {...this.props} data={this.state.pressed} />;
}
};
マイHOCの使用
import { ButtonComp } from './button.common';
class Button extends Component {
render() {
const buttonStyle = [styles.button];
if (this.props.data) buttonStyle.push(styles.buttonPress);
return (
<TouchableOpacity onPress={this.handlePress.bind(this)} style={buttonStyle}>
<Text style={styles.text}>{this.props.text}</Text>
</TouchableOpacity>
)
}
}
export default ButtonComp(Button); // Enhanced component
Iはコード上に実行すると、私は次のエラーを取得する(this.handleの呼び出しが発生したとき、TouchableOpacityタグ中のSO):
未定義はオブジェクトではありません( 'this.handlePress.bind'を評価する)
どうしたのですか? HOCは関数ではなくデータを渡すだけですか? 助けてくれてありがとう!