亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定

Draft 文檔翻譯 - 高級主題 - 常用的Block渲染

標簽:
React.JS
常用的Block渲染

本文讨论如何自定义Draft默认块渲染。块渲染用于定义支持的块类型及其各自的渲染器,以及将粘贴的内容转换为已知的草稿块类型。

当粘贴内容或使用convertFromHTML草稿时,将粘贴的内容转换为相应的块渲染类型,方法是将“草稿”块渲染图与匹配的标签进行匹配。

配置块渲染图
HTML element  Draft block type
<h1/>         header-one
<h2/>         eader-two
<h3/>         header-three
<h4/>         header-four
<h5/>         header-five
<h6/>         header-six
<blockquote/> blockquote
<pre/>        code-block
<figure/>     atomic
<li/>         unordered-list-item,ordered-list-item**
<div/>        unstyled*
Configuring block render map

通过将不可变图传递给编辑器blockRender道具,可以覆盖Draft默认块渲染地图。

覆盖默认块渲染图的示例:

const blockRenderMap = Immutable.Map({
  'header-two': {
    element: 'h2'
  },
  'unstyled': {
    element: 'h2'
  }
});

class RichEditor extends React.Component {
  render() {
    return (
      <Editor
        ...
        blockRenderMap={blockRenderMap}
      />
    );
  }
}

有些情况下,而不是覆盖默认值,我们只是想添加新的块类型; 这可以通过使用DefaultDraftBlockRenderMap引用来创建一个新的blockRenderMap来完成

const blockRenderMap = Immutable.Map({
  'section': {
    element: 'section'
  }
});

const extendedBlockRenderMap = Draft.DefaultDraftBlockRenderMap.merge(blockRenderMap);

class RichEditor extends React.Component {
  render() {
    return (
      <Editor
        ...
        blockRenderMap={extendedBlockRenderMap}
      />
    );
  }
}

当Draft解析粘贴HTML时,它将HTML元素映射回草稿块类型。 如果要指定映射到特定块类型的其他HTML元素,则可以将数组aliasedElements添加到块配置。

未锁定块类型别名的使用示例:

'unstyled': {
  element: 'div',
  aliasedElements: ['p'],
}
Custom block wrappers

默认情况下,html元素用于包装块类型,但也可以将一个 React 组件提供给blockRenderMap以包装EditorBlock。

在粘贴或使用convertFromHTML时,将扫描html以匹配标签元素。当blockRenderMap上有一个定义来包装该特定块类型时,将使用一个包装器。 例如:

Draft使用包装器将<li />包裹在<ol />或<ul />中,但是包装也可以用于包装任何其他自定义块类型.

扩展默认块渲染图以使用自定义块的反应组件的示例:

class MyCustomBlock extends React.Component {
  constructor(props) {
    super(props);
  }

  render() {
    return (
      <div className='MyCustomBlock'>
        {/* here, this.props.children contains a <section> container, as that was the matching element */}
        {this.props.children}
      </div>
    );
  }
}

const blockRenderMap = Immutable.Map({
  'MyCustomBlock': {
    // element is used during paste or html conversion to auto match your component;
    // it is also retained as part of this.props.children and not stripped out
    element: 'section',
    wrapper: <MyCustomBlock {...this.props} />
  }
});

// keep support for other draft default block types and add our myCustomBlock type
const extendedBlockRenderMap = Draft.DefaultDraftBlockRenderMap.merge(blockRenderMap);

class RichEditor extends React.Component {
  ...
  render() {
    return (
      <Editor
        ...
        blockRenderMap={extendedBlockRenderMap}
      />
    );
  }
}
點擊查看更多內容
TA 點贊

若覺得本文不錯,就分享一下吧!

評論

作者其他優質文章

正在加載中
Web前端工程師
手記
粉絲
91
獲贊與收藏
327

關注作者,訂閱最新文章

閱讀免費教程

  • 推薦
  • 評論
  • 收藏
  • 共同學習,寫下你的評論
感謝您的支持,我會繼續努力的~
掃碼打賞,你說多少就多少
贊賞金額會直接到老師賬戶
支付方式
打開微信掃一掃,即可進行掃碼打賞哦
今天注冊有機會得

100積分直接送

付費專欄免費學

大額優惠券免費領

立即參與 放棄機會
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號

舉報

0/150
提交
取消