![](/img/trans.png)
[英]React JS useState initial value not updating inside JS fetch API
[英]React - How get initial value from Backend API in useState?
我在 useEffect 中发送了一些设置数据:
const [settingsData, setSettingsData] = useState([]);
const [settingsLoading, setSettingsLoading] = useState(true);
useEffect(() => {
if (isAuth) {
apiClient
.get("api/v1/page-data/settings")
.then((response) => {
setSettingsData(response.data);
setSettingsLoading(false);
})
.catch((error) => console.error(error));
}
}, []);
并使用来自后端的数据为两个键输入创建 useStates:
const [publicKey, setPublicKey] = useState(
settingsData?.data?.user_data?.public_key
);
const [secretKey, setSecretKey] = useState(
settingsData?.data?.user_data?.secret_key
);
有一个输入:
<input
value={publicKey}
onChange={(e) => setPublicKey(e.target.value)}
placeholder="PublicKey"
/>
<input
value={secretKey}
onChange={(e) => setSecretKey(e.target.value)}
placeholder="SecretKey"
/>
加载页面时,我只看到空输入,看起来 useState 在未定义时分配我的后端属性。 如果此挂钩在我的设置数据从后端加载之前初始化初始值,我如何将后端数据分配给 useState?
您的关键相关初始状态设置为undefined
,因为数据在创建时不可用。 有几种方法可以解决这个问题,这里有几个:
const [settingsData, setSettingsData] = useState([]);
const [settingsLoading, setSettingsLoading] = useState(true);
const [publicKey, setPublicKey] = useState('');
const [secretKey, setSecretKey] = useState('');
useEffect(() => {
if (isAuth) {
apiClient
.get("api/v1/page-data/settings")
.then(({ data }) => {
setSettingsData(data);
setSettingsLoading(false);
setPublicKey(data.user_data.public_key);
setSecretKey(data.user_data.secret_key);
})
.catch((error) => console.error(error));
}
}, []);
useEffect
来更新你的关键远程状态const [settingsData, setSettingsData] = useState([]);
const [publicKey, setPublicKey] = useState('');
const [secretKey, setSecretKey] = useState('');
useEffect(() => {
if (settingsData) {
setPublicKey(settingsData.user_data.public_key);
setSecretKey(settingsData.user_data.secret_key);
}
}, [settingsData]);
const [settingsData, setSettingsData] = useState([]);
const [settingsLoading, setSettingsLoading] = useState(true);
const [publicKey, setPublicKey] = useState('');
const [secretKey, setSecretKey] = useState('');
const publicK = settingsData?.data?.user_data?.public_key;
const secretK = settingsData?.data?.user_data?.secret_key;
useEffect(() => {
if (isAuth) {
apiClient
.get("api/v1/page-data/settings")
.then(({ data }) => {
setSettingsData(data);
setSettingsLoading(false);
setPublicKey(data.user_data.public_key);
setSecretKey(data.user_data.secret_key);
})
.catch((error) => console.error(error));
}
}, []);
// inputs will start with the values from const but once you write anything
// in the input it will change to the managed value in state
<input
value={publicKey || publicK}
onChange={(e) => setPublicKey(e.target.value)}
placeholder="PublicKey"
/>
<input
value={secretKey || secretK}
onChange={(e) => setSecretKey(e.target.value)}
placeholder="SecretKey"
/>
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.