Реагировать с использованием методов внутри функции

#reactjs #react-redux #components

#reactjs #реагировать-redux #Компоненты

Вопрос:

Я пытаюсь создать компонент справочной службы в React, он будет содержать всю карту с кучей данных. У меня уже загружены данные, но я не могу получить доступ к данным извне этого компонента.

 const ReferenceService = () => {

  const dispatch = useDispatch();
  const referenceTables = useSelector(selectReferenceTables);
  const referenceServiceStatus = useSelector((state) => state.referenceService.status);

  useEffect(() => {
    if(referenceServiceStatus === 'idle'){
      dispatch(loadReferenceTables())
    }
  }, [referenceServiceStatus, dispatch]);

  const getReferenceTables = () => {
    return referenceTables;
  };

  const getReferenceTable = (tableName) => {
    return referenceTables[tableName];
  };

}
export default ReferenceService;
 

Я пытался делать:

 import ReferenceService from '../referenceService/ReferenceService';

const getRef = () => {
  console.log(ReferenceService.getReferenceTables());
}
 

и получение
Необработанное отклонение (ошибка типа): referenceService_ReferenceService__WEBPACK_IMPORTED_MODULE_6_.default.getReferenceTables не является функцией

Как мне переписать этот компонент, чтобы я мог получить доступ к функциям?

Ответ №1:

ReferenceService не экспортирует getReferenceTables, разместите его и экспортируйте или измените логику

Комментарии:

1. я пробовал это, но тогда я не могу получить доступ к ссылочным таблицам из useSelector(selectReferenceTables);

2. Почему бы просто не заставить ReferenceService возвращать referenceTables?

3. поскольку я хочу добавить к нему другие методы, такие как getReferenceTable, которые просто возвращают 1 из таблицы, и getEntry, которые анализируют и возвращают только одну запись в одной таблице

Ответ №2:

найдено решение..

мне просто нужно было добавить

 return {getReferenceTables, getReferenceTable, getEntry};
 

к ReferenceService
затем добавьте

 const {getReferenceTables, getReferenceTable, getEntry} = ReferenceService();
 

туда, где я хочу его использовать.