margox / braft-editor

美观易用的React富文本编辑器,基于draft-js开发
MIT License
4.61k stars 593 forks source link

无法找到braft-utils #370

Closed mablevi closed 5 years ago

mablevi commented 5 years ago

image

"react": "^16.7.0", "antd": "^3.12.4", "axios": "^0.18.0", "braft-editor": "^2.2.5", "prop-types": "^15.6.2", "react-router-dom": "^4.3.1"

margox commented 5 years ago

braft-utils这个包,暂时还没有对应的ts声明文件,你看看能不能通过别的办法解决掉这个报错吧

mablevi commented 5 years ago

大佬,我其实想做的是antd表单 upload上传返回URL之后

this.setState({
            editorState: ContentUtils.insertMedias(this.state.editorState, [{
                type: 'IMAGE',
                url: 'http://pic41.photophoto.cn/20161024/0017030261398198_b.jpg'
            }])
        })

图片没有插进去

initialValue: this.state.editorState,

margox commented 5 years ago

看看你getFieldDecorator那一块的代码?

mablevi commented 5 years ago
{
    getFieldDecorator('content', {
        initialValue: this.state.editorState,
        validateTrigger: 'onBlur',
        rules: [
            {
                required: true,
                validator: (_, value,callback) => {
                    if(value.isEmpty()) {
                        callback('请输入内容')
                    } else {
                        callback()
                    }
                }
            }
        ]
    }
    )(
        <BraftEditor
            className="my-editor"
            controls={controls}
            placeholder="请输入正文内容"
            extendControls= {extendControls}
        />
    )
}
margox commented 5 years ago

用了antd form的话,就不适合再在state里面管理这个组件的状态了,而且initialValue只会在第一次传入的时候有效,暂时不支持动态设置,异步设置编辑器的内容,可以用antd form的setFieldsValue方法,你试试这样用:

this.props.form.setFieldsValue({
  content: ContentUtils.insertMedias(this.props.form.getFieldValue('content'), [{
    type: 'IMAGE',
    url: 'http://pic41.photophoto.cn/20161024/0017030261398198_b.jpg'
  }])
})
mablevi commented 5 years ago

此方法可以解决,万分感谢!跪谢大佬!

mablevi commented 5 years ago

刚哥 又碰到一个问题了,我在mapPropsToFields回填antd表单的时候,

state ={
    fields:{
        title: {
            value: 'test'
        },
        editorState: {
            // 这里应该如何传参?
            value: BraftEditor.createEditorState('<p>Hello <b>World!</b></p>')
        }
    }
}
margox commented 5 years ago

你上面的代码是外层组件里面声明状态的那一段么?那你在子组件里面:

mapPropsToFields(props) {
    return {
      editorState: Form.createFormField({
        ...props.editorState,
        value: props.editorState.value,
      }),
    };
}

这样写拿不到值么? 我没用过mapPropsToFields这个功能,但是按照antd的文档来看应该就是这样写的吧

mablevi commented 5 years ago

好的,我试试去

pipijoe commented 5 years ago

无法找到braft-utils 怎么解决的?

Ucoon commented 4 years ago

请问 用antd form的话,能支持动态设置,异步设置编辑器的内容吗,以下代码好像没有生效: this.setState({ editorState: ContentUtils.insertMedias(this.state.editorState, [{ type: 'IMAGE', url: URL.createObjectURL }]) })