Прежде всего, вместо того, чтобы получать все элементы в списке, а затем выполнять фильтрацию для текущего пользователя, вы должны получить только элемент (ы) для текущего пользователя. Как только ваш список увеличится в размерах, вы будете выполнять большие накладные расходы, извлекая все элементы.
Во-вторых, и то, что вы упоминаете в своих комментариях, заключается в том, что вам необходимо указать идентификатор элемента для обновления. Таким образом, в вашем componentDidMount
после получения элемента списка для текущего пользователя сохраните этот элемент в своем состоянии.
public componentDidMount() {
if (Environment.type === EnvironmentType.Local) {
}
else if (Environment.type === EnvironmentType.SharePoint || Environment.type === EnvironmentType.ClassicSharePoint) {
//This gets the current users info and sets it to username and email
sp.web.currentUser.get().then((response : CurrentUser) => {
//console.log(response);
this.setState({
userName: response["Title"],
getEmail: response["Email"],
});
pnp.sp.web.lists.getByTitle("MyList").items.filter("Email_x0020_Address eq '" + this.state.getEmail + "'").top(1).get().then((items: any[]) => {
if (items && items.length) {
this.setState( { selectedUser: items[0] } );
}
});
})
}
}
Затем во время обновления вы можете использовать идентификатор этого элемента для сохранения it.
private _onUpdate(event) {
event.preventDefault();
//This is where I need help on updating list
let list = pnp.sp.web.lists.getByTitle("MyList")
//Instead of getting by ID i need to get by that selectUser array I believe
list.items.getById(this.state.selectedUser.ID).update({
Status: this.state.Status, //User changing from Online to Offline
Location: this.state.Location //User changing from New York to Los Angeles
}).then(i => {
console.log(i);
});
}
Кроме того, вы захотите убедиться, что вы связываете свой обработчик представления так же, как вы делаете для своих обработчиков onchange в своем конструкторе:
this._onUpdate = this._onUpdate.bind(this);
Я буду также добавьте, что, если вы не будете предварительно заполнять Список всеми возможными пользователями и всегда будете обновлять его новыми пользователями, было бы лучше поставить галочку в вашем _onUpdate
, что если this.state.selectedUser == null || this.state.selectedUser.ID == null
затем вы должны создать новый элемент (и добавить новый элемент в this.state.selectedUser
) вместо обновления.