【发布时间】:2021-08-21 21:09:40
【问题描述】:
我有一个小型 React 组件,它仅使用富文本编辑器 (TinyMCE) 来编辑 Web 应用程序上显示的文本字段中的值。
我发现如果我输入太快或太多,我会收到这个错误:
未捕获的错误:超出最大更新深度。这可能发生在一个 组件在 componentWillUpdate 内重复调用 setState 或 componentDidUpdate.
但我没有使用componentWillUpdate 或componentDidUpdate
所以我不确定 React 为什么会这样告诉我。
我尝试过修复,但没有任何帮助。
如果有任何见解,我将不胜感激! :)
这是我的 React 组件:
import React, { useState, useEffect } from 'react';
import { Editor } from '@tinymce/tinymce-react';
import axios from 'axios';
const App = (props) => {
const [engineText, setEngineTextState] = useState(props.engineText || "Describe your engine...");
const [engineId, setEngineIdState] = useState(props.engineId);
var edValue = '';
// first check local storage to see if they already have typed something...use engineId as the unique key
if (localStorage.getItem(engineId)) {
edValue = localStorage.getItem(engineId);
} else {
edValue = engineText;
}
const [engineState, setEngineState] = useState(edValue);
// set the local storage in case user navigates away and then comes back we don't lose what they wrote
useEffect(() => {
localStorage.setItem(engineId, engineState)
}, [engineState]);
// update database
const updateEngineText = (content) => {
const request = axios.put(`/api/EngineManagementConsole/${engineId}/engineText`, JSON.stringify(content), {
headers: {
'Content-Type': 'application/json'
}
});
setEngineState(content);
}
return (
<Editor
initialValue={edValue}
init={{
height: 500,
menubar: 'file edit view insert format tools table help',
plugins: [
'searchreplace visualblocks code fullscreen',
]
}}
value={engineState}
onEditorChange={updateEngineText}
/>
)
}
export default App;
【问题讨论】:
标签: reactjs axios react-hooks local-storage