reactjs - 我在选择选项上选择新项目后Useeffect不更新
问题描述
我更改了选项,但使用效果没有更新输入。请指导我在哪里出错。首先我使用 useEffect 来设置货币,然后我使用映射为 getCurrency 将其添加到 Select 选项上。onCitySelect 我在更改 Select 选项时将其添加到 setSelectedId 中。最后,我尝试使用 api 获取地址,但问题是我需要更改 api/address?currency=${selectId.id}` 我添加了 selectedId.id 但每次我更改选项选择它都不会影响并使用 useEffect 更新。我尝试了不同的解决方案无法做到。我如何更新 useEffect eveytime 选项选择更改(selectId.id)?
export default function Golum() {
const router = useRouter();
const dispatch = useDispatch();
const [getCurrency, setCurrency] = useState("");
const [getAddress, setAddress] = useState("");
const [selectCity, setSelectCity] = useState("");
const [selectId, setSelectId] = useState({
id: null,
name: null,
min_deposit_amount: null,
});
const [cityOptions, setCityOptions] = useState([]);
useEffect(() => {
setSelectCity({ label: "Select City", value: null });
setCityOptions({ selectableTokens });
}, []);
const onCitySelect = (e) => {
if (e == null) {
setSelectId({
...selectId,
id: null,
name: null,
min_deposit_amount: null,
});
} else {
setSelectId({
...selectId,
id: e.value.id,
name: e.value.name,
min_deposit_amount: e.value.min_deposit_amount,
});
}
setSelectCity(e);
};
const selectableTokens =
getCurrency &&
getCurrency.map((value, key) => {
return {
value: value,
label: (
<div>
<img
src={`https://central-1.amazonaws.com/assets/icons/icon-${value.id}.png`}
height={20}
className="mr-3"
alt={key}
/>
<span className="mr-3 text-uppercase">{value.id}</span>
<span className="currency-name text-uppercase">
<span>{value.name}</span>
</span>
</div>
),
};
});
useEffect(() => {
const api = new Api();
let mounted = true;
if (!localStorage.getItem("ACCESS_TOKEN")) {
router.push("/login");
}
if (mounted && localStorage.getItem("ACCESS_TOKEN")) {
api
.getRequest(
`${process.env.NEXT_PUBLIC_URL}api/currencies`
)
.then((response) => {
const data = response.data;
dispatch(setUserData({ ...data }));
setCurrency(data);
});
}
return () => (mounted = false);
}, []);
useEffect(() => {
const api = new Api();
let mounted = true;
if (!localStorage.getItem("ACCESS_TOKEN")) {
router.push("/login");
}
if (mounted && localStorage.getItem("ACCESS_TOKEN")) {
api
.getRequest(
`${process.env.NEXT_PUBLIC_URL}api/address?currency=${selectId.id}`
)
.then((response) => {
const data = response.data;
dispatch(setUserData({ ...data }));
setAddress(data.address);
})
.catch((error) => {});
}
return () => (mounted = false);
}, []);
return (
<div className="row mt-4">
<Select
isClearable
isSearchable
onChange={onCitySelect}
value={selectCity}
options={selectableTokens}
placeholder="Select Coin"
className="col-md-4 selectCurrencyDeposit"
/>
</div>
<div className="row mt-4">
<div className="col-md-4">
<Form>
<Form.Group className="mb-3" controlId="Form.ControlTextarea">
<Form.Control className="addressInput" readOnly defaultValue={getAddress || "No Address"} />
</Form.Group>
</Form>
</div>
</div>
);
}
解决方案
我认为您正在访问错误的 e 对象。e 代表点击事件,您应该使用此行访问该值
e.target.value.id
e.target.value.value
推荐阅读
- amazon-web-services - 使用 Multer 和 nodejs 上传图像而不存储它
- php - 如何访问本地文件?
- python - 当用户在他的个人资料中更改他的电子邮件时,有没有办法确认用户电子邮件 - django
- r - How can I convert a list of data frames into a data frame of lists using purrr or tidyr?
- typescript - Fastify: ts-node shoot error 属性 'foo' 在类型 'FastifyInstance<...>' 上不存在
- javascript - 为微型富文本编辑器创建点击弹出窗口
- typescript - ReactNative Animated.ScrollView ref TypeScript 定义
- javascript - 我不确定为什么我的 Fetch-Post 请求未定义
- flutter - 由于谷歌地图,颤振应用程序无法编译
- unique - vega:过滤每组的第n个