页面上有一个输入,最初它是空的。我需要实现以下功能:在页面加载时,组件App
从localStorage
获取键appData
的值并将其放在input
中。也就是说,在localStorage中,我将值写入输入,并且在重新加载时将其显示在输入中。我该怎么做呢?我需要使用useEffect
import { useEffect, useState } from "react";
export default function App() {
const [userData, setUserData] = useState("");
useEffect(() => {
localStorage.setItem("Userdata", JSON.stringify(userData));
}, [userData]);
return (
<div>
<input value={userData} onChange={(e) => setUserData(e.target.value)}></input>
</div>
);
}
使用change
事件写入localStorage
,然后在useState
钩子中使用init函数。
import { useState } from 'react';
const loadUserData = () => localStorage.getItem('UserData') || '';
const saveUserData = (userData) => localStorage.setItem('UserData', userData);
export default const Application = () => {
const [ userData, setUserData ] = useState(loadUserData);
const handleUserDataUpdate = e => {
const userData = e.target.value;
setUserData(userData);
saveUserData(userData);
};
return <div>
<label htmlFor="testInput">Test Input</label>
<input id="testInput" value={ userData } onChange={ handleUserDataUpdate } />
</div>;
}
如果您需要一个使用非受控输入的示例,这里有一个使用useEffect
的示例:
import { useEffect } from 'react';
const loadUserData = () => localStorage.getItem('UserData') || '';
const saveUserData = (userData) => localStorage.setItem('UserData', userData);
export default const Application = () => {
const inputRef = useRef();
useEffect(() => {
inputRef.current.value = loadUserData();
}, []); // initial load
const handleUpdateUserData = () => {
saveUserData(inputRef.current.value);
};
return <div>
<label htmlFor="testInput">Test Input</label>
<input ref={ inputRef } id="testInput" onChange={ handleUpdateUserData } />
</div>;
}
您可以为state
内部的输入设置一个默认值。
const [userData, setUserData] =
useState(JSON.parse(localStorage.getItem('Userdata')) || '');
因此,当组件挂载时(在重新加载后),初始userData
值直接从localStorage
中获取。如果为空,则设置回退值(''
)。
注意:请确保在输入中也添加了onChange
处理程序。