2015-05-14 12 views
13

Chcę usunąć komponent w moim React Native kodu, podobnie jak "el.parentNode.removeChild (el)" w JavaScript lub "[view removeFromSuperview]" w Objective-C, ale nie widziałem żadnych powiązanych API w dokumentach odpowiedzi. Czy jest jakiś sposób, aby to zrobić?Jak usunąć lub odmontować komponent w React Native?

+0

Czy masz próbki kodu? –

+1

@DavidWyly To bardzo częsta sytuacja. Nie sądzę, że konieczne są próbki kodu. – huimin

Odpowiedz

25

W React Native lub ogólnie w React, ponieważ rozumiem, że zazwyczaj nie usuwa się komponentów, wywołując "remove [..]", ale zmieniając znacznik komponentu, zmieniając w ten sposób wirtualny DOM.

Oto przykładowy kod, który usuwa MapView z ekranu.

'use strict'; 

var React = require('react-native'); 
var { 
    AppRegistry, 
    StyleSheet, 
    Text, 
    View, 
    SwitchIOS, 
    MapView, 
} = React; 

var TestMap = React.createClass({ 

    getInitialState() { 
    return { 
     showMap: true, 
    }; 
    }, 

    render: function() { 
    var map = this.state.showMap ? <MapView style={styles.map}/> : null; 
    return (
     <View style={styles.container}> 
     <Text style={{marginBottom: 10}}>Remove a view in React Native</Text> 
     <SwitchIOS 
      onValueChange={(value) => this.setState({showMap: value})} 
      style={{marginBottom: 10}} 
      value={this.state.showMap} 
      /> 
     {map} 
     </View> 
    ); 
    } 
}); 

var styles = StyleSheet.create({ 
    container: { 
    flex: 1, 
    marginTop: 50, 
    alignItems: 'center', 
    backgroundColor: '#F5FCFF', 
    }, 
    map: { 
    height: 200, 
    width: 300, 
    margin: 10, 
    borderWidth: 1, 
    borderColor: '#000000', 
    }, 

}); 

AppRegistry.registerComponent('TestMap',() => TestMap); 

Właściwa część istota:

render: function() { 
    var map = this.state.showMap ? <MapView style={styles.map}/> : null; 
    return (
     <View style={styles.container}> 
     [..] 
     {map} 
     </View> 
    ); 
    } 
0

Zazwyczaj nie bezpośrednio odmontować komponentów. W React Native używamy navigator do montowania/odmontowywania komponentów.

Na przykład navigator.pop() "Przejście z powrotem i odmontowanie aktualnej sceny."

I nie jesteś niektóre inne metody, których można użyć, należy sprawdzić Doc: https://facebook.github.io/react-native/docs/navigator.html

1

Jeśli używasz zindex na dowolnych poglądów, które chcesz usunąć, przepraszam, to nie będzie działać w wszystko od 0.39.0. Skończysz z pustym brzydką skorupą najbliższej gdzie widok kiedyś

Również ten sposób var map = this.state.showMap ? <MapView style={styles.map}/> : null;

może czasem pracy, ale coraz częściej trzeba coś nieco bardziej skomplikowane, więc spróbuj tego:

render() { 
     var cUsers = function() { 
     if (this.props.somePropety) { 
      return (<SomeSpecialView/>) 
     } else { 
      return null // or something like (<Text>Some other view</Text>) 
     } 
     }.bind(this) 
     return (
     <View style={style.container}> 
      {cUsers()} 
     </View> 
    ) 
    } 

bind(this) jest ważne. Są też inne sposoby na .bind(this).

+0

Hej, mam ten dokładny problem. Czy masz jakieś wskazówki, jak rozwiązać ten problem? Mam modal wykonany z pozycją absolute i zIndex 1200. Kiedy modal jest zrobiony, zmieniam style przeszłe na nim, zanim zostanie on aktywowany, ale tło modalnych pozostaje ułożone na całym ekranie. Czy znasz prawidłowy sposób radzenia sobie z tym problemem? – wuno