【发布时间】:2020-09-14 11:50:50
【问题描述】:
所以我有一个组件,当单击该组件时,它必须将城市的 ID 存储在 localStorage 的数组中。我正在为此使用自定义挂钩,如下所述。我面临的问题是,每当单击组件时,它都会完全重写 localStorage 中的值,而不是推送新值。
import React, {useEffect, useState} from 'react';
import styled from 'styled-components';
const Container = styled.div`
background-color: white;
display: flex;
position: relative;
flex-direction: column;
align-items: center;
justify-content: center;
width: 100%;
cursor: pointer;
padding: 2rem;
margin-top: 2rem;
transition: all 0.2s ease;
border-radius: 5px;
box-shadow: 0 .1rem 1rem 5px rgba(0,0,0,0.07);
&:hover{
box-shadow: 0 .1rem 1rem 5px rgba(0,0,0,0.16);
transform: translateY(-3px);
}
`;
const SearchedCity = (props) => {
const [storedId, setId] = useLocalStorage('ids', []);
let handleId = () => {
setId(prev => [...prev, props.cityId]);
}
return (
<Container onClick={handleId}>
{props.children}
</Container>
)
}
const useLocalStorage = (key, initialValue) => {
const [storedId, setStoredValue] = useState(() => {
try {
const item = window.localStorage.getItem(key);
return item ? JSON.parse(item) : initialValue;
} catch (err) {
console.error(err);
return initialValue;
}
});
const setValue = value => {
try {
const valueToStore =
value instanceof Function ? value(storedId) : value;
setStoredValue(valueToStore);
window.localStorage.setItem(key, JSON.stringify(valueToStore));
} catch (err) {
console.error(err);
}
};
return [storedId, setValue];
};
export default SearchedCity;
【问题讨论】:
标签: reactjs react-hooks local-storage