Reputation: 2422
I have a list of users coming from the database
const [users, setUsers] = useState([]);
database.getUsers.then(users => setUsers(users))
I print that in a simple list and when I click on each of them I render a form to update the name
const [user, setUser] = useState({});
database.getUser(userId).then(user => setUser(user))
useEffect(() => {
// I need to implement debounce or something like that here. any suggestions are welcome;)
database.saveUser(userId, user).then(user => console.log(user.name + 'saved!'))
}, [user])
<input value={ user.name } onChange={(e) => setUser({...user, name: e.target.value})} />
My question is: how to keep users updated with the name I just updated in one particular user?
Upvotes: 0
Views: 49
Reputation: 15290
let say you have some unique id user_id
in your user list each individual user object.
database.saveUser(userId, user).then(user => {
const updatedUsers = users.map(function(userInfo){
if(userInfo.user_id === user.user_id){
userInfo.name = user.name;
}
return userInfo;;
})
// update the userlist with current updated user
setUsers(updatedUsers)
console.log(user.name + 'saved!')
})
Upvotes: 0
Reputation: 955
for your problem it is better to code like this :
const [user, setUser] = useState({});
useEffect(() => {
fetchUserInfo()
}, [])
const fetchUserInfo = () => {
database.getUser(userId).then(user => setUser(user))
}
const changeHandler = e => {
setUser({...user, name: e.target.value});
database.saveUser(userId, user).then(user => console.log(user.name + 'saved!'))
}
<input value={ user.name } onChange={changeHandler}/>
in this way while you typing your username your db will be sync with your form.
Upvotes: 1