[英]Using local storage to retain state of radio buttons when navigating to a new page
下面的代码代表两组单选按钮。 每当用户单击每组中的一个按钮时,他们将被传送到一个新页面,该页面上具有完全相同的一组单选按钮。 但是每当他们导航到新页面或刷新页面时,最新的 state 个单选按钮就会丢失。 有没有一种方法可以存储每组单选按钮的最新值,并在我们导航到新页面或刷新页面时检索/显示最新值?
提前致谢!
import { useNavigate } from 'react-router-dom';
export default function DisplayHomeOptions() {
let navigate = useNavigate();
const [formData, setFormData] = React.useState({ location: "", selector: "" })
function handleChange(event) {
const { name, value, type, checked } = event.target
setFormData(prevFormData => {
return {
...prevFormData,
[name]: type === "checkbox" ? checked : value
}
})
}
useEffect(() => {
const { location, selector } = formData;
if (location && selector) {
const target = navTarget[location][selector];
if (target) {
navigate(target);
}
}
}, [formData]);
const navTarget = {
National: {
Messages: "/national/messages",
Polls: "/national/polls",
Questions: "/national/questions",
},
Global: {
Messages: "/global/messages",
Polls: "/global/polls",
Questions: "/global/questions",
}
}
return (
<div>
<fieldset>
<legend>Option #1</legend>
<input
type="radio"
name="location"
value="Global"
onChange={handleChange}
/>
<label htmlFor="Global">Global</label>
<input
type="radio"
name="location"
value="National"
onChange={handleChange}
/>
<label htmlFor="National">National</label>
</fieldset>
<fieldset>
<legend>Option #2</legend>
<input
type="radio"
name="selector"
value="Messages"
onChange={handleChange}
/>
<label htmlFor="Messages">Messages</label>
<input
type="radio"
name="selector"
value="Questions"
onChange={handleChange}
/>
<label htmlFor="Questions">Questions</label>
<input
type="radio"
name="selector"
value="Polls"
onChange={handleChange}
/>
<label htmlFor="Polls">Polls</label>
</fieldset>
</div>
)
}```
我建议将所有按钮的 state 保存在一个 object 中,然后使用JSON.stringify()
将其放入字符串中。
我将添加一个非常简短的示例来说明我的意思:
State部分组件:
// Default state if browserstorage is empty
const defaultState = {
button1: false,
button2: false,
button3: false,
}
// Get state from browser storage
const currentState = JSON.parse(localStorage.getItem("buttonState"))
// Initialise state with browser state or default state
const [state, setState] = useState(currentState || defaultState)
处理更改 function
const handleChange = (e) => {
// Create new state
const newState = {...state, e.target.name: e.target.value}
// Stringify new state and store it in the browsers local storage
localStorage.setItem("buttonState", JSON.stringify(newState))
// Set New State
setState(newState)
}
按钮/开关需要设置name
属性以匹配 state 名称才能使此示例正常工作。
这是一个一般的例子,但你明白了
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.