[英]How to update nested states in React?
I am pretty new to react and can't wrap my head around how to go about doing this.我对做出反应还很陌生,无法理解如何 go 这样做。
So I have my state as follows: Main.js所以我有我的 state 如下: Main.js
import React, { Component } from "react";
import Users from "./Users";
class App extends Component {
state = {
users: [
{ id: 0, name: "a", count: 0 },
{ id: 1, name: "b", count: 0 },
{ id: 2, name: "c", count: 0 },
],
};
increment = (id) => {
this.setState({
// No idea how to interface this
});
};
render() {
return (
<div className="App container">
<h1 className="center blue-text">Counter</h1>
<Users users={this.state.users} increment={this.increment} />
</div>
);
}
}
export default App;
Users.js用户.js
import React from "react";
const Users = ({ users, increment }) => {
const userList = users.map((user) => {
return (
<div className="collection-item" key={user.id}>
<p>
{user.name} : {user.count}{" "}
</p>
<button onClick={() => increment(user.count)}>+</button>
</div>
);
});
return <div className="users collection">{userList}</div>;
};
export default Users;
How do I go about updating the count value via function, I can't figure out how to use this.setState to update the count while its nested.我如何 go 关于通过 function 更新计数值,我不知道如何使用 this.setState 在嵌套时更新计数。 Any ideas?
有任何想法吗? Thank you for any guidance.
感谢您的任何指导。
Here is the working app:https://codesandbox.io/s/nifty-resonance-ek411?file=/src/App.js这是工作应用程序:https://codesandbox.io/s/nifty-resonance-ek411?file=/src/App.js
main.js main.js
import React, { Component } from "react";
import Users from "./Users";
class App extends Component {
state = {
users: [
{ id: 0, name: "a", count: 0 },
{ id: 1, name: "b", count: 0 },
{ id: 2, name: "c", count: 0 }
]
};
increment = id => {
// find to user to update
const userIndex = this.state.users.findIndex(user => user.id === id);
// for invalid id
if (userIndex < 0) {
return;
}
const userToUpdate = this.state.users[userIndex];
const updatedUsers = [...this.state.users];
// update the user on that index
updatedUsers[userIndex] = {
...userToUpdate,
count: userToUpdate.count + 1
};
/// update the user state
this.setState({ users: updatedUsers });
};
render() {
return (
<div className="App container">
<h1 className="center blue-text">Counter</h1>
<Users users={this.state.users} increment={this.increment} />
</div>
);
}
}
export default App;
app.js应用程序.js
import React from "react";
const Users = ({ users, increment }) => {
const userList = users.map(user => {
return (
<div className="collection-item" key={user.id}>
<p>
{user.name} : {user.count}{" "}
</p>
<button onClick={() => increment(user.id)}>+</button>
</div>
);
});
return <div className="users collection">{userList}</div>;
};
export default Users;
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.