reactjs - react-ace + flexlayout-react:Ace 编辑器不断重置
问题描述
我有一个FlexLayout
(来自flexlayout-react),其中包含一个AceEditor
(来自react-ace)。为了测试,我还添加了一个Test
组件。
import React, { useState } from 'react';
import ReactDOM from 'react-dom';
import FlexLayout from 'flexlayout-react';
import AceEditor from 'react-ace';
// display an Ace editor (here with fixed size)
const Editor = () => {
return (
<AceEditor
width="200px"
height="200px"
value="foo"
/>
);
}
// an increment button, just something simple stateful
const Test = () => {
const [count, setCount] = useState(0);
return (
<div>
<button onClick={() => setCount(count + 1)}>
{count}
</button>
</div>
);
};
// two columns for editor and test component
const model = FlexLayout.Model.fromJson({
global: {},
borders: [],
layout: {
type: 'row',
weight: 50,
children: [
{
type: 'tabset',
weight: 50,
selected: 0,
children: [
{
type: 'tab',
name: 'A',
component: 'editor',
},
],
},
{
type: 'tabset',
weight: 50,
selected: 0,
children: [
{
type: 'tab',
name: 'B',
component: 'test',
},
],
},
],
},
});
const factory = node => {
switch (node.getComponent()) {
case 'editor': {
return <Editor />;
}
case 'test': {
return <Test />;
}
default:
return null;
}
}
// display the flex layout
const Ide = () => {
return (
<FlexLayout.Layout
model={model}
factory={factory}
/>
);
};
// render everything
ReactDOM.render(
<Ide />,
document.getElementById('react-container')
);
发生什么了?
每当FlexLayout
状态更改(焦点更改、拖动分隔线、更改宽度)时,Ace 编辑器的文本都会重置为foo
. 相反,Test
保留 的值。没有FlexLayout
,问题就消失了。
所以这两个组件之间似乎存在一种奇怪的交互,但我对 React 太缺乏经验,无法弄清楚。我将如何调试这个?解决此类问题的常见途径是什么?或者在这种特定情况下出现错误的任何具体想法?
解决方案
推荐阅读
- javascript - 在JavaScript中的数组中每n个元素插入一个元素
- shopify - “shopify login” 在 Linux Manjaro 上不起作用(在终端中使用 shopify cli)
- excel - Excel VBA:检查是否存在谷歌驱动器快捷方式
- hdf5 - mac上如何设置HDF5_DIR为hdf5安装目录
- typescript - Postgres / Typeorm / Express:如何为来自多个客户端的同时请求保持数据库一致?
- python - discord.py dm 命令问题
- batch-file - 批处理:循环中创建的变量不能在外部使用
- reactjs - Mapbox & React:无法在搜索框中输入值
- python - 诗歌无法安装 PyGObject
- sql-server - MS SQL Server 中是否有任何方法可以使用某种链接将表的一列映射到另一个数据库?