#reactjs
#reactjs
Вопрос:
Я пытаюсь добиться создания кнопки приостановки работы пользователя путем обновления значений статуса пользователя на приостановленный, но проблема в том, что статус определен, но другие значения не определены я сделал что-то не так или есть какой-либо способ обновить значения, чтобы другая переменная, подобная имени, не требовалась?
Это то, что я имею в виду:
Это мой код:
const User = (props) => (
<>
<DropdownButton id="dropdown-basic-button" title="Action">
<Dropdown.Item>
<a
href="user"
onClick={() => {
props.onSubmit(props.user[0]);
}}
>
<i className="fas fa-trash"></i> Suspend
</a>
</Dropdown.Item>
</DropdownButton>
</>
);
export default class Users extends Component {
constructor(props) {
super(props);
this.onSubmit = this.onSubmit.bind(this);
this.state = { users: [] };
}
componentDidMount() {
axios
.get("http://localhost:5000/users/")
.then((response) => {
this.setState({ users: response.data });
})
.catch((error) => {
console.log(error);
});
}
onSubmit(id) {
const user = {
name: this.state.name,
password: this.state.password,
email: this.state.email,
storeName: this.state.storeName,
storeUrl: this.state.storeUrl,
date: this.state.date,
status: "Suspended",
};
console.log(user);
axios
.post("http://localhost:5000/users/update/" id, user)
.then((res) => console.log(res.data));
}
userList(currentuser) {
return (
<User
user={currentuser}
key={currentuser[0]}
onSubmit={this.onSubmit}
/>
);
}
render() {
const columns = [
{
name: "_id",
options: {
display: false,
},
},
{
name: "name",
label: "Name",
options: {
filter: true,
sort: true,
},
},
{
name: "Action",
options: {
customBodyRender: (value, tableMeta, updateValue) => {
return <>{this.userList(tableMeta.rowData)}</>;
},
},
},
];
const { users } = this.state;
return (
<>
<MUIDataTable data={users} columns={columns} />
</>
);
}
}
Комментарии:
1. Что такое
this.state.storeUrl
? состояние имеет единственное значение для пользователя2. привет @vincenzopalazzo это одно из значений, таких как name, email, StoreName
3. ops Я пропустил здесь некоторый код, извините!
4. нет проблем, ХЕХЕХЕ
5. Состояние
User
есть{ users: [] }
, но вonSubmit
вы делаете это :this.state.name
….
Ответ №1:
Вы не определяли и не устанавливали значения индивидуальных атрибутов пользователя в состоянии! Поэтому неудивительно, что они отображаются как неопределенные, когда вы пытаетесь их прочитать…
Самым простым решением было бы:
onSubmit(id) {
//let user = this.state.users.find(user => user.id === id); // find by id
let user = this.state.users[id]; // find by index
if (user) {
user.status = 'Suspended';
console.log(user);
axios
.post("http://localhost:5000/users/update/" id, user)
.then((res) => console.log(res.data));
}
}
Комментарии:
1. Привет, спасибо за ответ, действительно ценю это
2. Не удается установить для свойства ‘status’ значение undefined это ошибка, когда я помещаю этот код
3. Вы должны поместить все это в if-оператор (отредактировал мой ответ). Кроме того, измените
find
функцию так, чтобы она соответствовала пользователю, над которым вы работаете.4. Привет @k-wasilewski что значит изменить?
5. В теле js
find
-функции вы определяете критерии для объекта, который вы ищете. Я предположил, что любая из ваших пользовательских сущностей (полученных из api) имеетid
атрибут, но поскольку вы говорите, что функция возвращает undefined, вероятно, вам нужно определить критерии по-другому.