当前位置: 首页 > news >正文

天猫网站设计特点拼多多推广关键词首选帝搜软件

天猫网站设计特点,拼多多推广关键词首选帝搜软件,太原网站建设外包须知传媒,建设黑彩网站需要什么现在#xff0c;相关的基础知识我们应该有个大概的了解了#xff0c;但离我们真正的开发出一个实用型的组件还有一段距离#xff0c;不过不用担心#xff0c;我们离目标已经越来越近。 以现在我们所了解的内容而言#xff0c;或许你发现了一个问题#xff0c;就是我们的编…现在相关的基础知识我们应该有个大概的了解了但离我们真正的开发出一个实用型的组件还有一段距离不过不用担心我们离目标已经越来越近。 以现在我们所了解的内容而言或许你发现了一个问题就是我们的编辑器的内容如何保存的问题数据的保存是最重要的一个环节无法保存的数据意义不大。我们以本地数据持久化为例来说明Slate中的这一相关功能。 到目前为止我们的编辑一但在页面刷新的情况下就会还原到初始状态即使我们做了诸多的内容编辑也会付诸东流。我们以本地存储为例为Slate/ 组件添加onChange事件如下所示 SDocer.jsx: import { useState, useCallback } from react; import { createEditor, Editor, Transforms, Element } from slate; import { Slate, withReact, Editable } from slate-react;import { initialValue } from ./_configure; import { renderElement } from ./_elementRender; import { renderLeaf } from ./_leafRender; import { Helper } from ./_helper;function SDocer() {const [editor] useState(() withReact(createEditor()));return (Slateeditor{editor}initialValue{initialValue}onChange{value {const isAstChange editor.operations.some(op set_selection ! op.type)if (isAstChange) {const content JSON.stringify(value)localStorage.setItem(content, content)}}}EditablerenderElement{useCallback(renderElement, [])}renderLeaf{useCallback(renderLeaf, [])}onKeyDown{event {if (!event.ctrlKey) return;switch (event.key) {case : {event.preventDefault()Helper.toggleCodeBlock(editor);break}case b: {Helper.toggleBoldMark(editor);break}}}}//Slate) }export default SDocer;这时候当我们键入任何内容后在 localStorage中 content 中的内容都能看到变化。如下所示 虽然现在我们的内容能够实时的保存但是页面一刷新还是还原了这是显而易见的因为我们并没有在组件初始化时从我们的LocalStore中读取数据所以就只显示初始变量中的内容。我们调入localStorage中的内容就行了 const initDatas () JSON.parse(localStorage.getItem(content)) || initialValue;并把这个内容用useMemo无依赖的静态化如下所示 import { useState, useCallback, useMemo } from react; import { createEditor, Editor, Transforms, Element } from slate; import { Slate, withReact, Editable } from slate-react;import { initialValue } from ./_configure; import { renderElement } from ./_elementRender; import { renderLeaf } from ./_leafRender; import { Helper } from ./_helper;const initDatas () JSON.parse(localStorage.getItem(content)) || initialValue;function SDocer() {const [editor] useState(() withReact(createEditor()));return (Slateeditor{editor}initialValue{useMemo(initDatas, [])}onChange{value {const isAstChange editor.operations.some(op set_selection ! op.type)if (isAstChange) {const content JSON.stringify(value)localStorage.setItem(content, content)}}}EditablerenderElement{useCallback(renderElement, [])}renderLeaf{useCallback(renderLeaf, [])}onKeyDown{event {if (!event.ctrlKey) return;switch (event.key) {case : {event.preventDefault()Helper.toggleCodeBlock(editor);break}case b: {Helper.toggleBoldMark(editor);break}}}}//Slate) }export default SDocer;这个时候当你编辑后再刷新页面内容就不在发生变化了。这样的json数据很适用利于网络传输。但有时你可能特立独行就是要走不一样的道路也是可以的我们可以自定义序列化 serialize 和 反序列化 deserialize ,比如我想保存一个纯文格式或许就要这样做了 新建一个工具文件 _untils.jsx import { Node } from slateexport const serialize value {return (value.map(n Node.string(n)).join(\n)) }export const deserialize string {const content string || return content.split(\n).map(line {return {children: [{ text: line }],}}) }上面的工具很简单就是把所有的节点纯文本化。以换行符分割。把上面的工具应用于Slate,如下所示 import { useState, useCallback, useMemo } from react; import { createEditor, Editor, Transforms, Element } from slate; import { Slate, withReact, Editable } from slate-react;import { initialValue } from ./_configure; import { renderElement } from ./_elementRender; import { renderLeaf } from ./_leafRender; import { Helper } from ./_helper; import { serialize, deserialize } from ./_untils;// const initDatas () JSON.parse(localStorage.getItem(content)) || initialValue; const initDatas () deserialize(localStorage.getItem(content)) || ;function SDocer() {const [editor] useState(() withReact(createEditor()));return (Slateeditor{editor}initialValue{useMemo(initDatas, [])}onChange{value {const isAstChange editor.operations.some(op set_selection ! op.type)if (isAstChange) {// const content JSON.stringify(value)localStorage.setItem(content, serialize(content))}}}EditablerenderElement{useCallback(renderElement, [])}renderLeaf{useCallback(renderLeaf, [])}onKeyDown{event {if (!event.ctrlKey) return;switch (event.key) {case : {event.preventDefault()Helper.toggleCodeBlock(editor);break}case b: {Helper.toggleBoldMark(editor);break}}}}//Slate) }export default SDocer;结果符合预期。相似的做法我也可以将内容序列化HTML、Markdown 等等一切皆有可能。
http://www.pierceye.com/news/867643/

相关文章:

  • 高端大气的网站制作建筑人才网下载
  • 如何快速提升网站关键词排名综合服务平台一站式服务平台网站开发
  • 阿土伯 是做网站的吗建设厅国网查询网站
  • 天长哪个广告公司做网站中国菲律宾汇率换算
  • 动漫在线制作网站wordpress get_template_part
  • 肇庆高端品牌网站建设住建部网站资质查询中宏建设集团
  • 扁平化网站模板下载莱西网站建设哪家好
  • 用vis做的简单网站网站建设需求方案pdf
  • 怎么免费做网站视频教学沈阳网站备案
  • 徐州有哪些网站制作公司太原住房和城乡建设部网站
  • 专门做摩托车的网站注册域名阿里云
  • 做个简单的网站建站公司费用
  • 网站建设举措网站免费建站方法
  • 遵义市双控体系建设网站wamp wordpress安装
  • 厦门的网站建设公司龙岗网站-建设深圳信科
  • 上海网站建设q.479185700強成都上界品牌设计事务所
  • 产品设计优秀网站做网站申请多少类商标
  • 中国行业网站贵州网站建设seo优化
  • 网站部兼容ie6没有防盗链的网站
  • google网站推广网站自助平台
  • 外贸自建站多久能出单wordpress的pdf阅读
  • 深圳东莞的网站建设公司网店代运营哪里好
  • 做费网站wordpress折叠代码
  • 分析海报的网站企业网站服务费怎么做记账凭证
  • 海南建设大厅网站888网创
  • aspnet网站开发实例项目河南网站建设推广
  • ppt免费模板大全网站微网站建设网站
  • 郑州网站建设七彩科技网络服务器配置设计
  • 专业企专业企业网站设计洛阳青峰网络
  • 网站开发需要多少钱如何销售管理系统需求分析