首页 > 解决方案 > 如何在刷新时保存编辑的文本?

问题描述

我正在使用一个名为“EdiText”的 React 组件。现在,我可以保存文本,但如果我刷新页面,它会恢复到初始值。即使在页面刷新后,我也想保存并保留编辑的值。

我的代码如下:

const Project = ({ project, onDelete}) => {
    const [value, setValue] = useState('')

    const handleSave = (val) => {
        console.log('Edited value ->', val);
        setValue(val);
    } 

    return (
        <div>
            <div className="project-component">
                    <EdiText 
                    type="text" 
                    className="project-title" 
                    value={project.title} 
                    onSave={handleSave} 
                    showButtonsOnHover
                    submitOnUnfocus
                    cancelOnUnfocus
                    />
                    <br/>
                    <EdiText 
                    type="textarea" 
                    className="project-description" 
                    value={project.description} 
                    onSave={handleSave} 
                    showButtonsOnHover
                    submitOnUnfocus
                    cancelOnUnfocus
                    />
                    <Link to={`/projectpage/${project.id}`} className="view-icon"><FaEye/></Link>
                    <FaTrash className="delete-icon" onClick={() => onDelete(project.id)}/>
            </div>
        </div>
    )
}

标签: reactjs

解决方案


您可以为此使用自定义挂钩

// Hook
function useLocalStorage(key, initialValue) {
  // State to store our value
  // Pass initial state function to useState so logic is only executed once
  const [storedValue, setStoredValue] = useState(() => {
    try {
      // Get from local storage by key
      const item = window.localStorage.getItem(key);
      // Parse stored json or if none return initialValue
      return item ? JSON.parse(item) : initialValue;
    } catch (error) {
      // If error also return initialValue
      console.log(error);
      return initialValue;
    }
  });
  // Return a wrapped version of useState's setter function that ...
  // ... persists the new value to localStorage.
  const setValue = (value) => {
    try {
      // Allow value to be a function so we have same API as useState
      const valueToStore =
        value instanceof Function ? value(storedValue) : value;
      // Save state
      setStoredValue(valueToStore);
      // Save to local storage
      window.localStorage.setItem(key, JSON.stringify(valueToStore));
    } catch (error) {
      // A more advanced implementation would handle the error case
      console.log(error);
    }
  };
  return [storedValue, setValue];
}

将其存储到另一个文件中并像这样导入和使用:

const [value, setValue] = useLocalStorage('')

推荐阅读