Reactjs 获取react native中本地状态的初始值
我的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,
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: []
};
}
在导航之前,我必须在构造函数中设置所有这些属性。相反,如果我将克隆stateconstcloneobj=Object.assign({},this.state)
并将此对象用于setStatethis.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按钮。但我也看到过,如果点击两次,然后提交两次。我有一个逻辑,如果一些值为空,那么它将不会被提交。这就是我想提交的原因。所以,当点击按钮时,您导航到另一条路线?是的,先生,我想在第一次导航时重置无需担心,因为一旦重新加载/销毁页面,所有内容都将被销毁。现在的浏览器更成熟了:)没什么好担心的,因为一旦重新加载/销毁页面,所有内容都将被销毁。现在的浏览器更加成熟:)