#javascript #reactjs #syncfusion #react-ref
#javascript #reactjs #syncfusion #react-ref
Вопрос:
Я использую syncfusion
элементы управления react для добавления некоторой функциональности в мое приложение. Я хочу вызвать метод для элемента управления в моем функциональном компоненте, но я не смог правильно получить ref
набор:
import React, {createRef, useEffect, useState} from "react";
import {AutoCompleteComponent} from "@syncfusion/ej2-react-dropdowns";
import "@syncfusion/ej2-base/styles/bootstrap.css";
import "@syncfusion/ej2-react-inputs/styles/bootstrap.css";
import "@syncfusion/ej2-react-dropdowns/styles/bootstrap.css";
const UserLookup = ({userSelected}) => {
const [searchString, setSearchString] = useState('');
const [items, setItems] = useState([]);
const helper = new QueryHelper();
let listObj = createRef();
const searchStringChanged = (args) => {
console.log(args.text);
if (args.text.length > 3) {
setSearchString(args.text);
}
}
const optionSelected = (event) => {
memberSelected(event.item.id);
}
useEffect(() => {
fetch('http://example.com/myendpoint')
.then(response.map((result) => {
listObj.current.showPopup(); // <-- this method should be called on the autocomplete component
return {
id: result.contactId,
label: result.firstName ' ' result.lastName
}
}))
.then(data => console.log(data));
}, [searchString]);
return (
<AutoCompleteComponent
id="user_search"
autofill={true}
dataSource={items}
fields={
{
value: 'label'
}
}
filtering={searchStringChanged}
select={optionSelected}
popupHeight="250px"
popupWidth="300px"
placeholder="Find a contact (optional)"
ref={listObj}
/>
);
};
export default UserLookup;
это всегда выдает ошибку, которая Cannot read property 'showPopup' of null
— как вы устанавливаете ссылку для экземпляра AutoCompleteComponent
, чтобы вы могли вызывать для него методы?
Комментарии:
1. интересно, поможет ли передача в
useEffect(() => {..}, [searchString, listobj.current])
ref
useEffect, а затем проверкаif (listObj.current)
передfetch
этим?ref
запускается как null, пока не будет установлено значение get, поэтому, если строка поиска изменена, будет вызван useEffect, но ref все равно может быть null?2. в функциональном компоненте вам нужен useRef , а не
createRef
. ИспользованиеcreateRef
даст вам новую ссылку при каждом рендеринге, она не будет сохранена.
Ответ №1:
Мы можем получить ссылку на автозаполнение, когда оно отображается как функциональный компонент, с помощью использования метода useRef вместо метода createRef . Пожалуйста, найдите измененный образец ниже.
Пример ссылки: https://codesandbox.io/s/throbbing-shadow-ddsmf