Hide/Show components in react native

后端 未结 24 1996
囚心锁ツ
囚心锁ツ 2020-12-07 08:43

I\'m really new to React Native and I\'m wondering how can I hide/show a component.
Here\'s my test case:



        
相关标签:
24条回答
  • 2020-12-07 09:20

    Actually, in iOS development by react-native when I use display: 'none' or something like below:

    const styles = StyleSheet.create({
      disappearImage: {
        width: 0,
        height: 0
      }
    });
    

    The iOS doesn't load anything else of the Image component like onLoad or etc, so I decided to use something like below:

    const styles = StyleSheet.create({
      disappearImage: {
        width: 1,
        height: 1,
        position: 'absolute',
        top: -9000,
        opacity: 0
      }
    });
    
    0 讨论(0)
  • 2020-12-07 09:20

    If you want to hide it but keep the space occupied by the component like css's visibility: hidden setting in the component's style opacity: 0 should do the trick.

    Depending on the component other steps in disabling the functionality might be required as interaction with an invisible item is possible.

    0 讨论(0)
  • 2020-12-07 09:21

    In your render function:

    { this.state.showTheThing && 
      <TextInput/>
    }
    

    Then just do:

    this.setState({showTheThing: true})  // to show it  
    this.setState({showTheThing: false}) // to hide it
    
    0 讨论(0)
  • 2020-12-07 09:21

    I needed to switch between two images. With conditional switching between them there was 5sec delay with no image displayed.

    I'm using approach from downvoted amos answer. Posting as new answer because it's hard to put code into comment with proper formatting.

    Render function:

    <View style={styles.logoWrapper}>
      <Image
        style={[styles.logo, loading ? styles.hidden : {}]}
        source={require('./logo.png')} />
      <Image
        style={[styles.logo, loading ? {} : styles.hidden]}
        source={require('./logo_spin.gif')} />
    </View>
    

    Styles:

    var styles = StyleSheet.create({
      logo: {
        width: 200,
        height: 200,
      },
      hidden: {
        width: 0,
        height: 0,
      },
    });
    

    0 讨论(0)
  • 2020-12-07 09:21
    checkincheckout = () => {
            this.setState({ visible: !this.state.visible })
    }
    
    render() {
            return (
    {this.state.visible == false ?
            <View style={{ alignItems: 'center', flexDirection: 'row', marginTop: 50 }}>
    
            <View style={{ flex: 1, alignItems: 'center', flexDirection: 'column' }}>
    
                <TouchableOpacity onPress={() => this.checkincheckout()}>
    
                    <Text style={{ color: 'white' }}>Click to Check in</Text>
    
                </TouchableOpacity>
    
            </View>
    
        </View>
    :
    <View style={{ alignItems: 'center', flexDirection: 'row', marginTop: 50 }}>
    
    <View style={{ flex: 1, alignItems: 'center', flexDirection: 'column' }}>
    
       <TouchableOpacity onPress={() => this.checkincheckout()}>
    
            <Text style={{ color: 'white' }}>Click to Check out</Text>
    
        </TouchableOpacity>
    
    </View>
    
    </View>
     }
    
    );
    }
    

    thats all. enjoy your coding...

    0 讨论(0)
  • 2020-12-07 09:24

    I would do something like this:

    var myComponent = React.createComponent({
    
        getInitialState: function () {
            return {
                showCancel: false,
            };
        },
    
        toggleCancel: function () {
            this.setState({
                showCancel: !this.state.showCancel
            });
        }
    
        _renderCancel: function () {
            if (this.state.showCancel) {
                return (
                    <TouchableHighlight 
                        onPress={this.toggleCancel()}>
                        <View>
                            <Text style={styles.cancelButtonText}>Cancel</Text>
                        </View>
                    </TouchableHighlight>
                );
            } else {
                return null;
            }
        },
    
        render: function () {
            return (
                <TextInput
                    onFocus={this.toggleCancel()}
                    onChangeText={(text) => this.doSearch({input: text})} />
                {this._renderCancel()}          
            );
        }
    
    });
    
    0 讨论(0)
提交回复
热议问题