react-富文本编辑框遇到的问题
项目需求实现一个划词功能,由于textarea的局限性,考虑到使用div来实现,通过设置div的contentEditable来模拟文本框。实现代码如下:
class ContentEditable extends Component {
constructor(props) {
super(props)
}shouldComponentUpdate(nextProps) {
return nextProps.html !== this.elem['innerText']
}onChange = (e) => {
const value= https://www.it610.com/article/this.elem['innerText']
this.props.onChange(e, value)
}render() {
const { html, contentEditable, ...props } = this.props
return (
{ this.elem = elem }}
dangerouslySetInnerHTML={{ __html: html }}
contentEditable={contentEditable}
onInput={ this.onChange }
/>
)
}
}e.g.
...
handleEditTextChange = (e, value) => {
this.setState({
title: value
})
}
重点注意该方法
shouldComponentUpdate(nextProps) {
return nextProps.html !== this.elem['innerText']
}
通过shouldComponentUpdate控制组件的渲染,从而解决不用每次输入都重新渲染组件,导致光标回位到初始状态的问题。
【react-富文本编辑框遇到的问题】需要普及的关于dangerouslySetInnerHTML需要了解的
https://www.cnblogs.com/daowangzhizhu-pt/p/6385088.html
关于contentEditable属性可参看张鑫旭大神的两篇文章
http://www.zhangxinxu.com/wordpress/2016/01/contenteditable-plaintext-only/
http://www.zhangxinxu.com/wordpress/2010/12/div-textarea-height-auto/
推荐阅读
- 《失落的百年致富圣经》读后感
- 合理情绪疗法之试用|李克富思维训练营56/90
- 2018-09-03(李克富视角点评训练营81/90)|2018-09-03(李克富视角点评训练营81/90) 那只蛙从“井”爬出来又进入了“隧道”
- 幸福是个比较级
- 财富自由之路
- 我的朋友,你一定会成为富妈妈
- 第二阶段day1总结
- 富裕的好处是对资源的优先占有
- 《通往财富自由之路》人生的终极问题到底是什么()
- 2020年,财富逻辑的大变迁