useEffect 不适用于语义 UI React 中的多个下拉菜单
useEffect not working with multiple dropdowns in Semantic UI React
我正在使用语义 UI React。
以下 JS 代码对我不起作用:
import React, { useState, useEffect } from "react";
import { Dropdown, Form, Button } from "semantic-ui-react";
export const MovieDropdown = () => {
const [movie, setMovie] = useState("");
const [person, setPerson] = useState("");
const [movieOptions, setMovieOptions] = useState([]);
const [personOptions, setPersonOptions] = useState([]);
useEffect(() => {
Promise.all([
fetch("/people").then(res =>
res.json()
),
fetch("/movies").then(res =>
res.json()
)
])
.then(([res1, res2]) => {
console.log(res1, res2);
var make_dd = (rec) => {
rec.map(x => {
return {'key': x.name, 'text': x.name, 'value': x.name}
})
}
setPersonOptions(make_dd(res1))
setMovieOptions(make_dd(res2))
})
.catch(err => {
console.log(err);
});
});
return (
<Form>
<Form.Field>
<Dropdown
placeholder="Select Movie"
search
selection
options={movieOptions}
onChange={(e, {value}) => setMovie(value)}
/>
</Form.Field>
<Form.Field>
<Dropdown
placeholder="Select Person"
search
selection
options={personOptions}
onChange={(e, {value}) => setPerson(value)}
/>
</Form.Field>
</Form>
);
};
export default MovieDropdown;
问题是当 运行 这个组件时我失去了数据库连接。我尝试使用 MySQL 和 SQLite,它给出了同样的问题。
如何解决这个问题?我应该为每个组件提取 1 次吗?
我先谢谢你了。
亲切的问候,
西奥
嗯,我不知道DB Connetion,但是在useEffect中调用api的推荐方式是这样的:
useEffect({
// your code here only once
},[])
或者,
useEffect({
// your code here will run whenever id changes
},[id])
您的 useEffect 将在每次渲染时 运行,这不是进行 api 调用的推荐时间/方式。
我正在使用语义 UI React。 以下 JS 代码对我不起作用:
import React, { useState, useEffect } from "react";
import { Dropdown, Form, Button } from "semantic-ui-react";
export const MovieDropdown = () => {
const [movie, setMovie] = useState("");
const [person, setPerson] = useState("");
const [movieOptions, setMovieOptions] = useState([]);
const [personOptions, setPersonOptions] = useState([]);
useEffect(() => {
Promise.all([
fetch("/people").then(res =>
res.json()
),
fetch("/movies").then(res =>
res.json()
)
])
.then(([res1, res2]) => {
console.log(res1, res2);
var make_dd = (rec) => {
rec.map(x => {
return {'key': x.name, 'text': x.name, 'value': x.name}
})
}
setPersonOptions(make_dd(res1))
setMovieOptions(make_dd(res2))
})
.catch(err => {
console.log(err);
});
});
return (
<Form>
<Form.Field>
<Dropdown
placeholder="Select Movie"
search
selection
options={movieOptions}
onChange={(e, {value}) => setMovie(value)}
/>
</Form.Field>
<Form.Field>
<Dropdown
placeholder="Select Person"
search
selection
options={personOptions}
onChange={(e, {value}) => setPerson(value)}
/>
</Form.Field>
</Form>
);
};
export default MovieDropdown;
问题是当 运行 这个组件时我失去了数据库连接。我尝试使用 MySQL 和 SQLite,它给出了同样的问题。 如何解决这个问题?我应该为每个组件提取 1 次吗? 我先谢谢你了。
亲切的问候, 西奥
嗯,我不知道DB Connetion,但是在useEffect中调用api的推荐方式是这样的:
useEffect({
// your code here only once
},[])
或者,
useEffect({
// your code here will run whenever id changes
},[id])
您的 useEffect 将在每次渲染时 运行,这不是进行 api 调用的推荐时间/方式。