[英]How to set button default selected in react?
我有一个react code (snippet, not a complete code)
,如下所示,它显示了时区列表。 单击按钮时,时区被选中并显示所有程序的列表。
const timezones = [{label:"PT",timezone:"America/Los_Angeles"},{label:"NT",timezone:"America/St_Johns"}];
const Picker = (props) => {
console.log(props.selectedTimezone); // Line Z
return(
timezones.map((timezoneObject) => {
console.log(timezoneObject.timezone); // Line Y
return <li><button className={`${timezoneObject.timezone === props.selectedTimezone ? 'selected' : ''}`}
onClick={(e) => {
e.preventDefault();
props.onChange(timezoneObject.timezone);
}}>{timezoneObject.label}</button></li>
})
)
}
我想要实现的是当页面加载时,时区NT
应该保持自动选择,而无需单击按钮。 我已经console.log(props) at Line Z
并且我在控制台上得到了NT
但仍然class selected
没有被应用于NT timezone
。 Line Y prints
:
America/Los_Angeles
America/St_Johns
React 不会在请求之间存储 state 信息。 每次刷新页面时,state 也会刷新。 但是,您可以使用 LocalStorage 来完成此操作。
这是我在某处找到并适用于我正在从事的项目之一的小片段:
import { useEffect, useState } from 'react';
const useStickyState = (defaultValue, key) => {
const [value, setValue] = useState(() => {
const stickyValue = window.localStorage.getItem(key);
return stickyValue !== null
? JSON.parse(stickyValue)
: defaultValue;
});
useEffect(() => {
window.localStorage.setItem(key, JSON.stringify(value));
}, [key, value]);
return [value, setValue];
}
export default useStickyState;
然后在您的组件中,您可以像这样使用它:
...
import useStickyState from '../../app/useStickyState';
...
const YourComponent = () => {
const [timeZone, setTimeZone] = useStickyState('NT', 'timezone');
...
}
useStickyState
的第一个参数是默认值,第二个参数是要使用的 LocalStorage 键的名称。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.