当前位置: 首页 > 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.zqtcl.cn/news/867643/

相关文章:

  • 亳州建设网站做网站文字怎么围绕图片
  • 网站开发 项目计划外链建设给网站起的作用
  • 你好南京网站网站开发实施步骤和说明
  • 文化共享工程网站建设情况wordpress菠菜插件
  • 网站大气是什么意思哈尔滨做网站电话
  • 公司网站站群是什么化妆品网站设计欣赏
  • 网站公司未来计划ppt怎么做平潭做网站
  • 做网站和推广工资多少招聘网站建设价格
  • 网站建设 响应式 北京网架公司十大排名榜
  • 网站推广目标关键词是什么意思网站推广软件工具
  • 哪里可以做免费的物流网站wordpress为什么放弃
  • 做网站需要多少钱 都包括什么高端大气的网站首页
  • 黄石做网站联系最近的国际新闻
  • 网站建设与运营的预算方案淘宝禁止了网站建设类
  • 做网站的顺序编写app的软件
  • 站长联盟个人网站不备案
  • 惠州建设工程交易网站网站服务器失去响应
  • 网站下拉广告iphone app wordpress
  • 网站图片怎样做seo优化如何重新安装wordpress
  • python做网站源码长沙建设网站制作
  • wordpress调用分类的所有子目录龙岩seo公司首荐3火星
  • 聊城市建设工程质量监督站网站wordpress 头部
  • 低价郑州网站建设wordpress是外网吗
  • 互联网门户网站有哪些win10优化大师是官方的吗
  • 深圳品牌做网站公司有哪些公司名称变更网站要重新备案吗
  • 网站网页建设实训心得体会二类电商平台都有哪些
  • 兰州免费网站建设上海城隍庙要门票吗
  • 如何做外贸soho做网站中型网站建设
  • 冠县品牌网站建设推广外贸企业网站管理系统
  • 信息管理的基本原理分析网站建设南阳网站建设制作