React.js 小书 Lesson25 - 实战分析:评论功能(四)


React.js 小书 Lesson25 - 实战分析:评论功能(四)

本文作者:胡子大哈
本文原文:http://huziketang.com/books/react/lesson25

转载请注明出处,保留原文链接以及作者信息

在线阅读:http://huziketang.com/books/react


目前为止,第二阶段知识已经基本介绍完,我们已经具备了项目上手实战必备的 React.js 知识,现在可以把这些知识应用起来。接下来是实战环节,我们会继续上一阶段的例子,把评论功能做得更加复杂一点。

我们在上一阶段的评论功能基础上加上以下功能需求:

  1. 页面加载完成自动聚焦到评论输入框。
  2. 把用户名持久化,存放到浏览器的 LocalStorage 中。页面加载时会把用户名加载出来显示到输入框,用户就不需要重新输入用户名了。
  3. 把已经发布的评论持久化,存放到浏览器的 LocalStorage 中。页面加载时会把已经保存的评论加载出来,显示到页面的评论列表上。
  4. 评论显示发布日期,如“1 秒前”,”30 分钟前”,并且会每隔 5 秒更新发布日期。
  5. 评论可以被删除。
  6. 类似 Markdown 的行内代码块显示功能,用户输入的用 `` 包含起来的内容都会被处理成用 元素包含。例如输入 `console.log` 就会处理成 console.log 再显示到页面上。

[图片上传失败...(image-177052-1510227040222)]

在线演示地址。

大家可以在原来的第一阶段代码的基础上进行修改,第一、二阶段评论功能代码可以在这里找到: react-naive-book-examples。可以直接使用最新的样式文件 index.css 覆盖原来的 index.css。

接下来可以分析如何利用第二阶段的知识来构建这些功能,在这个过程里面可能会穿插一些小技巧,希望对大家有用。我们回顾一下这个页面的组成:

[图片上传失败...(image-13ca3-1510227040222)]

我们之前把页面分成了四种不同的组件:分别是 CommentAppCommentInputCommentListComment。我们开始修改这个组件,把上面的需求逐个完成。

自动聚焦到评论框

这个功能是很简单的,我们需要获取 textarea 的 DOM 元素然后调用 focus() API 就可以了。我们给输入框元素加上 ref 以便获取到 DOM 元素,修改 src/CommentInput.js 文件:

...