Reputation: 1866
I want to reset the state of only certain (not all) states.
On the click of a button, values of present_count
, total_count
, present
and total
should be set to their initial state (0). While the state of subjects
and text
should remain intact.
constructor(props) {
super(props);
this.state = {
subjects: [],
text: "",
present_count: [0, 0, 0, 0, 0, 0, 0],
total_count: [0, 0, 0, 0, 0, 0, 0],
present: 0,
total: 0
}
}
EDIT:
I am using AsyncStorage
to save the modified state.
Upvotes: 0
Views: 6128
Reputation: 11622
You can use spread operator to override the current state values and then use the current state value of text
, subjects
:
// default state
const defaultState = {
subjects: [],
text: "",
present_count: [0, 0, 0, 0, 0, 0, 0],
total_count: [0, 0, 0, 0, 0, 0, 0],
present: 0,
total: 0
}
// component constructor.
constructor(props) {
super(props);
this.state = { ...defaultState };
}
// click event handler
handleClick = () => {
this.setState({
...defaultState,
subjects: this.state.subjects,
text: this.state.text
});
}
Upvotes: 2
Reputation: 426
Using the spread operator would likely be useful here.
constructor(props) {
super(props);
this.defaultState = {
present_count: [0, 0, 0, 0, 0, 0, 0],
total_count: [0, 0, 0, 0, 0, 0, 0],
present: 0,
total: 0
}
this.state = {
subjects: [],
text: "",
...defaultState,
}
}
.
.
.
onClick = () => {
this.setState({
...this.defaultState, // This will only pass in values from your defaultState and leave the others (subjects & text) alone
});
}
Upvotes: 1
Reputation: 1669
You can create an object store your state your initial state of states you want to reset, like this:
const initState = {
total: 0,
present: 0,
present_count: [0, 0, 0, 0, 0, 0, 0],
total_count: [0, 0, 0, 0, 0, 0, 0],
}
and then you can
this.setState({
...initialState
})
on your button onClick
Hope that help. ^^
Upvotes: 1