В приведенном ниже коде я пытаюсь заполнить теги опций моего раскрывающегося списка из ответа на мой вызов API. Не уверен, почему он не отображается, поскольку когда я проверяю отладчик в браузере, он определенно попадает в конечную точку, все, что я получаю, - это пустой раскрывающийся список.
Мой код для компонента:
interface ExpensesState {
date: Date;
isLoading: Boolean;
expenses: ICategory[];
categories: ICategory[];
}
const Expenses: React.FC = () => {
const [state, setState] = useState<ExpensesState>({
date: new Date(),
isLoading: true,
expenses: new Array<ICategory>(),
categories: new Array<ICategory>(),
});
const getCategories = () => {
const service = new CategoryService();
service
.getAll()
.then((response) => {
setState({ ...state, categories: response });
setState({ ...state, isLoading: false });
})
.catch((err) => console.log(err));
};
useEffect(() => getCategories(), []);
const handleChange = () => {};
const title = <h3>Add Expense</h3>;
return (
<>
<div>
<AppNav />
<Container>
{title}
<Form>
<FormGroup>
<label htmlFor="title">Title</label>
<input
type="text"
name="title"
id="title"
onChange={handleChange}
/>
</FormGroup>
<FormGroup>
<label htmlFor="Category">Category</label>
<select >
{!state.isLoading
? state.categories.map(({id, name}) => (
<option key={id.toString()} value={name}>{name}</option>
))
: <option>Loading...</option>}
</select>
<input
type="text"
name="category"
id="category"
onChange={handleChange}
/>
</FormGroup>
</Form>
</Container>
</div>
</>
)}
Это моя служба CategoryService, в которой я вызываю API.
class CategoryService {
async getAll(): Promise<ICategory[]> {
const response = await fetch(`/category`, {
method: "GET",
});
return response.ok ? response.json() : null;
}
}
export default CategoryService;
Любая помощь будет принята с благодарностью.