#reactjs #react-hooks
Вопрос:
У меня есть конечная точка API, которая возвращает аутентифицированные пользовательские данные со списком телефонных номеров, сохраненных в локальном хранилище, а также компонент, который извлекает телефонные номера из локального хранилища. Я хочу обновить локальное хранилище при выборе телефонного номера, изменив индекс выбранного телефонного номера на 0. Пожалуйста, как мне этого добиться?
Мой код ниже.
Данные пользователя в локальном хранилище
useraccount {
accounts: [
0: {phone: "010475758585"}
1: {phone:"090839494404" }
]
}
Компонент
const{useraccount: {accounts}} = isAuthenticated()
**// Endpoint below is dependent on the selected phone number**
const getUserTransactions =() =>{
axios.get(`http://example/transactions/${accounts[0]?.phone}`,{
headers: {
'Authorization': `Bearer ${token}`
}
}).then((res)=>{
if(res.data){
console.log(res.data);
setFetchingTransactions(res.data)
}else{
console.log("failed")
}
})
}
useEffect(() => {
getUserTransactions()
}, []);
return (
<>
<h3>Select an phone</h3>
<ul>
{accounts amp;amp; accounts.map((item, id) => (
<li key={id}>
<h3>{item.phone}</h3>
</li>
))}
</ul>
<Button type="submit" >
Select
</Button>
</>
)
Комментарии:
1. «Я хочу обновить локальное хранилище при выборе номера телефона, изменив индекс выбранного номера телефона на 0» — Трудно понять, что вы имели в виду под этим. Пожалуйста, отредактируйте свой вопрос и сделайте его более понятным.
Ответ №1:
В useHooks есть очень полезный крючок для этого под названием useLocalStorage
. Видишь https://usehooks.com/useLocalStorage/
вы бы использовали его вот так
const [transactions, setTransactions] = useLocalStorage('transactions', []);
useEffect(() => {
const newTransactions = getUserTransactions();
setTransactions(newTransactions);
}, []);
Ответ №2:
Вы можете обновить локальное хранилище, просто снова установив значение для ключа.
Нравится :
foo.jsx
class foo extends React.Component {
constructor(){
localStorage.setItem("foo", "foo");
}
updateStorage = (val) => {
localStorage.setItem("foo", val);
}
render(){
return(
<div>
<button onClick="() => this.updateStorage("foobar")">Update storage</button>
<h3>{{ localStorage.getItem("foo") }}</h3>
</div>
)
}
}