Я работал с SPFx, который содержит несколько элементов управления.Большая часть из них работает, но я плохо провожу время с подборщиком.Я использую элемент управления подборкой людей из pnp.Проблема в том, что он ничего не экономит и вместо этого сбрасывает ошибку 400.Я следовал примеру в Интернете, но, похоже, этот пример тоже не работает.
Вот как я поступаю:
В состоянии, которое у меня есть:
export interface IPeopleState {
salesmanager: string;
salesManagerId: number[];
}
В конструкторе у меня есть это:
constructor(props: IPeoplepickerProps) {
super(props);
this.state={
salesmanager: "",
salesManagerId: [],
}
this._getManager = this._getManager.bind(this);
}
Компонент Peoplepicker не имеет никакого странного кода и выглядит так:
<PeoplePicker
context={this.props.context}
titleText="Sales Manager"
personSelectionLimit={1}
groupName={""} // Leave this blank in case you want to filter from all users
showtooltip={true}
isRequired={false}
disabled={false}
selectedItems={this._getManager}
/>
И метод _getManagerтот, который должен обновить состояние с именем выбранного пользователя:
private _getManager(items: any[]) {
this.state.salesManagerId.length = 0;
let tempuserMngArr = [];
for (let item in items) {
tempuserMngArr.push(items[item].text);
}
this.setState({ salesmanager: tempuserMngArr[0].toString() });
console.log(this.state.salesmanager); // log empty
console.log(tempuserMngArr[0].toString()); // log full name
}
Во втором журнале консоли я получаю значение, которое я хочу, например, Джон Доу, но когда я запускаю консоль, войдите в систему this.state.manager показывает, что он пуст.Я не знаю, почему состояние не получает значение из tempuserMangArr?
Что не так?
ОБНОВЛЕНИЕ: Я обнаружил это, обновив метод _getManagers, например:это:
private async _getManager(items: any[]) {
await this.setState({ salesmanager: items[0].text });
console.log(this.state.salesmanager);
}
Я могу получить полное имя из штата.Теперь у меня есть другая проблема, и именно в методе, который фактически создает новый элемент в списке.Вот оно:
private _createItem(): void {
pnp.sp.web.lists.getByTitle("people").items.add({
salesmanager: this.state.salesmanager
});
}
Проблема в том, что консоль говорит следующее:
При попытке прочитать значение был найден узел 'PrimitiveValue' с ненулевым значениемсвойства навигации;однако ожидался узел 'StartArray', узел 'StartObject' или узел 'PrimitiveValue' с нулевым значением.
И я не знаю, что это значит!Конечно, из-за этого не создается новый элемент.
ОБНОВЛЕНИЕ 2 Теперь я знаю, почему на консоли появляется сообщение об ошибке.Это связано с тем, как я сохраняю менеджера по продажам в списке.Я протестировал сохранение менеджера по продажам в обычном текстовом столбце, и он работает, поэтому я подозреваю, что это как-то связано с тем, что столбцы людей работают так:как сохранить менеджера по продажам в колонке людей?
С уважением, Американо