TouchableHighlightがクリックされるとモーダルが表示されるようにしたくて、
最初onPressの部分をthis.test()としていたのですが、これだとクリックのタイミングではなく
コンポーネントがマウントされた際にモーダルが表示されてしまいました。
その後添付のコードのようにbindの書き方を見つけ実行したところうまくいったのですが、
なぜ最初の書き方だとうまくいかず、bindするとうまくいくのかよくわかりません。
Expo
1class HomeCommunity extends React.Component { 2 componentWillMount() { 3 this.state = { 4 img: '', 5 }; 6 } 7 8 componentDidMount() { 9 this.getImage(this.props); 10 } 11 12 getImage(props) { 13 const storageRef = firebase.storage().ref(); 14 const imgRef = storageRef.child(`communities/${props.community.img8}`); 15 imgRef.getDownloadURL().then((url) => { 16 this.setState({ img: url }); 17 }).catch((error) => { 18 console.log('Error getting document:', error); 19 }); 20 } 21 22 test() { 23 const { modalSwitch } = this.props; 24 modalSwitch(true); 25 } 26 27 render() { 28 const { community, modalSwitch } = this.props; 29 const { img } = this.state; 30 return ( 31 // ここのonPressの箇所が今回の問題 32 <TouchableHighlight onPress={this.test.bind(this)}> 33 <View style={styles.container}> 34 <View style={styles.titleView}> 35 <Text style={styles.title}>{community.name}</Text> 36 </View> 37 <View> 38 <Image style={styles.img} source={{ uri: img }} /> 39 </View> 40 </View> 41 </TouchableHighlight> 42 ); 43 } 44} 45 46const mapStateToProps = () => ({}); 47 48const mapDispatchToProps = (dispatch) => ({ 49 modalSwitch: (bool) => { 50 dispatch({ type: 'MODAL_SWITCH', payload: { bool } }); 51 }, 52}); 53 54const styles = StyleSheet.create({ 55 container: { 56 position: 'relative', 57 width: '100%', 58 height: Dimensions.get('window').height, 59 }, 60 titleView: { 61 position: 'absolute', 62 top: 10, 63 left: 10, 64 width: '100%', 65 height: 300, 66 zIndex: 99, 67 }, 68 title: { 69 color: '#fff', 70 fontSize: 16, 71 fontWeight: 'bold', 72 }, 73 img: { 74 width: '100%', 75 height: Dimensions.get('window').height, 76 }, 77}); 78 79export default connect(mapStateToProps, mapDispatchToProps)(HomeCommunity);
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2019/10/26 18:43 編集