创建React应用
使用create-react-app创建React应用,名为:doceditor-react-demo。
npx create-react-app doceditor-react-demo
创建完成后,切换到新创建的目录。
cd doceditor-react-demo
安装@o2oa/doceditor
使用以下命令安装@o2oa/doceditor:
#npm全局安装
npm install @o2oa/doceditor
#或yarn安装
yarn add @o2oa/doceditor
配置React打包插件
由于我们需要将@o2oa/doceditor中的public目录部署到输出目录,所以要为React的webpack配置增加一个copy-webpack-plugin插件。
要修改create-react-app创建的React应用的webpack,可以使用:npm run eject 来将封装在 CRA 中的配置全部反编译到当前项目,就可以修改webpack配置了。但这个方法会对后续的升级带来影响,所以我们可以使用react-app-rewired来修改webpack配置。
首先,安装react-app-rewired:
npm i -D react-app-rewired
然后安装copy-webpack-plugin插件:
npm i -D copy-webpack-plugin
然后在根目录创建一个config-overrides.js文件:
const CopyWebpackPlugin = require('copy-webpack-plugin');
module.exports = function override(config, env) {
if (!config.plugins) {
config.plugins = [];
}
//添加一个webpack插件,将@o2oa/doceditor的public目录部署到输出目录的doceditor/public下
config.plugins.push(
new CopyWebpackPlugin({
patterns: [
{
from: "node_modules/@o2oa/doceditor/editor/public",
to: "doceditor/public"
}
]
})
);
return config;
}
最后,修改package.json文件的script:
...
"scripts": {
"start": "react-app-rewired start",
"build": "react-app-rewired build",
"test": "react-app-rewired test",
"eject": "react-scripts eject"
}
...
创建组件
接着我们创建一个组件,用于调用DocEditor。我们在src/目录下创建一个文件:MyDocEditor.js
import React from 'react';
import DocEditor from '@o2oa/doceditor';
export default class MyDocEditor extends React.Component {
constructor(props) {
super(props);
this.setDivRef = element => {
this.editorContent = element;
};
}
async componentDidMount() {
if (!this.editor) this.editor = DocEditor.createEditor(this.editorContent, {
//我们在打包配置中将public目录输出到了 doceditor/public,
//所以此处需要配置为'./doceditor/' 或 'doceditor/'
base: "./doceditor/"
}).load();
}
render() {
return (
<div ref={this.setDivRef} />
);
}
}
使用MyDocEditor组件
修改index.js文件,引入MyDocEditor,并在渲染函数中增加<MyDocEditor>标签:
import React from 'react';
import ReactDOM from 'react-dom/client';
import './index.css';
import App from './App';
import reportWebVitals from './reportWebVitals';
import MyDocEditor from './MyDocEditor';
const root = ReactDOM.createRoot(document.getElementById('root'));
root.render(
<React.StrictMode>
<App />
<MyDocEditor />
</React.StrictMode>
);
// If you want to start measuring performance in your app, pass a function
// to log results (for example: reportWebVitals(console.log))
// or send to an analytics endpoint. Learn more: https://bit.ly/CRA-vitals
reportWebVitals();
适当修改了App.css中的样式,去掉了.App-header中的min-height: 100vh;
然后我们可以使用 npm run start来运行应用:
npm run start
运行结果如下:
在线运行
您可以在在线编辑器中尝试DocEditor与React的集成:在线运行本样例