Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/reactjs/24.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Reactjs 获取react native中本地状态的初始值_Reactjs_React Native - Fatal编程技术网

Reactjs 获取react native中本地状态的初始值

Reactjs 获取react native中本地状态的初始值,reactjs,react-native,Reactjs,React Native,我的react native组件中有一些本地状态。我在这里保存了一些数据,希望从这里清除导航上的所有本地状态。在我的构造函数中,我有 constructor(props) { super(props); this.state = { date: '', selectedTourType: 0, tourType: [], group: false, no_of_days: 5, scheduled: false,

我的react native组件中有一些本地状态。我在这里保存了一些数据,希望从这里清除导航上的所有本地状态。在我的构造函数中,我有

 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: []
    };
  }
在导航之前,我必须在构造函数中设置所有这些属性。相反,如果我将克隆state
constcloneobj=Object.assign({},this.state)
并将此对象用于setState
this.setState({cloneObj})。但我在内存中又做了一次引用,每次都会创建一个引用。
这是我所理解的,请解释一下什么是正确的方法

this.setState({ cloneObj });
这将尝试在
状态中找到
cloneObj
,并替换它,但这不是您想要的

为此,您需要做的是:

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 };
这将尝试在
状态中找到
cloneObj
,并替换它,但这不是您想要的

为此,您需要做的是:

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 };

那么,如果您要导航到新的路由,为什么要重置状态?您的组件将被卸载。在下一次装载时,它从构造器获得初始状态。先生,通过单击我使用导航的submit按钮。但我也看到过,如果点击两次,然后提交两次。我有一个逻辑,如果一些值为空,那么它将不会被提交。这就是我想提交的原因。那么,当单击按钮时,您导航到另一条路线?是的,先生,我想在第一次导航时重置。因此,如果您导航到一条新路线,为什么要重置状态?您的组件将被卸载。在下一次装载时,它从构造器获得初始状态。先生,通过单击我使用导航的submit按钮。但我也看到过,如果点击两次,然后提交两次。我有一个逻辑,如果一些值为空,那么它将不会被提交。这就是我想提交的原因。所以,当点击按钮时,您导航到另一条路线?是的,先生,我想在第一次导航时重置无需担心,因为一旦重新加载/销毁页面,所有内容都将被销毁。现在的浏览器更成熟了:)没什么好担心的,因为一旦重新加载/销毁页面,所有内容都将被销毁。现在的浏览器更加成熟:)