2017-11-21 12 views
1

反応するネイティブコンポーネントにローカルな状態があります。私はここにいくつかのデータを保存し、ここからナビゲーション上のすべての地方の州をきれいにしたいと思います。私のコンストラクタでは、私は持っています反応ネイティブのローカル状態の初期値を取得

constructor(props) { 
    super(props); 
    this.state = { 
    date: '', 
    selectedTourType: 0, 
    tourType: [], 
    group: false, 
    no_of_days: 5, 
    scheduled: false, 
    search_text: '', 
    searchedRegion: '', 
    budget: null, 
    editing: null, 
    path: [], 
    makers: [], 
    selected: false, 
    pressedIndex: 0, 
    users: [], 
    selected_users: [], 
    destination: null, 
    mapModalVisible: false, 
    milestoneModalVisible: false, 
    predictions: [], 
    searchedRegionPredictions: [], 
    polygons: [] 
    }; 
    } 

ナビゲーションの前に私はコンストラクタのようにこれらのプロパティをすべて設定する必要があります。これの代わりに、状態のクローンを作成する場合は、const cloneObj = Object.assign({}, this.state);とし、このオブジェクトをsetStateに使用します。this.setState({ cloneObj });しかし、私はここでメモをもう一度作成しており、リファレンスが作成されるたびに作成されます。 これは私が理解していることですが、正しい方法は何かを説明してください。

+0

ようにそれを行うことができます状態をリセットしたいですか?あなたのコンポーネントは、とにかくアンマウントされます。次のマウント時にコンストラクタから初期状態を取得します。 –

+0

先生、ナビゲーションを使用して送信ボタンをクリックします。しかし、2回クリックして2回クリックすると、何度か見たことがあります。値の一部がnullの場合、それは送信されないという論理があります。だから私は提出したい。 –

+0

ボタンをクリックすると、別のルートに移動できますか? –

答えて

0
this.setState({ cloneObj }); 

これはstatecloneObjを見つけ、それを交換しようとしますが、それはあなたがあなたがする必要があることについて

を望んでいたではないです:これは、すべての状態が上書きされます

this.setState({ ...this.state , ...cloneObj }); 

cloneObjと一致するプロパティ基本的には状態をリセットします。


だから、あなたが好きなことを行うことができます。

// inside constructor 
this.initStateData = { 
    date: '', 
    selectedTourType: 0, 
    tourType: [], 
    group: false, 
    no_of_days: 5, 
    scheduled: false, 
    search_text: '', 
    searchedRegion: '', 
    budget: null, 
    editing: null, 
    path: [], 
    makers: [], 
    selected: false, 
    pressedIndex: 0, 
    users: [], 
    selected_users: [], 
    destination: null, 
    mapModalVisible: false, 
    milestoneModalVisible: false, 
    predictions: [], 
    searchedRegionPredictions: [], 
    polygons: [] 
    }; 
this.state = { ...this.initStateData }; 

次にどんなイベントにあなたはあなたが、なぜ新しいルートにナビゲートしている場合は、だから、

this.setState = { ...this.state , ...this.initStateData }; 
+0

サー、クローン以上のオブジェクトを作ることは良いアイデアかどうかです。 –

+0

一度ページがリロード/破棄されるとすべてが破壊されるため、何も心配する必要はありません。今の日のブラウザはより成熟している:) –

関連する問題