React.js 小书 Lesson25 - 实战分析:评论功能(四)
React.js 小书 Lesson25 - 实战分析:评论功能(四)
转载请注明出处,保留原文链接以及作者信息 在线阅读:http://huziketang.com/books/react 目前为止,第二阶段知识已经基本介绍完,我们已经具备了项目上手实战必备的 React.js 知识,现在可以把这些知识应用起来。接下来是实战环节,我们会继续上一阶段的例子,把评论功能做得更加复杂一点。 我们在上一阶段的评论功能基础上加上以下功能需求:
在线演示地址。 大家可以在原来的第一阶段代码的基础上进行修改,第一、二阶段评论功能代码可以在这里找到: react-naive-book-examples。可以直接使用最新的样式文件 index.css 覆盖原来的 index.css。 接下来可以分析如何利用第二阶段的知识来构建这些功能,在这个过程里面可能会穿插一些小技巧,希望对大家有用。我们回顾一下这个页面的组成:
我们之前把页面分成了四种不同的组件:分别是 自动聚焦到评论框这个功能是很简单的,我们需要获取 ... <textarea ref={(textarea) => this.textarea = textarea} value={this.state.content} onChange={this.handleContentChange.bind(this)} /> ... 组件挂载完以后完成以后就可以调用 class CommentInput extends Component { static propTypes = { onSubmit: PropTypes.func } constructor () { super() this.state = { username: '',content: '' } } componentDidMount () { this.textarea.focus() } ... 这个功能就完成了。现在体验还不是很好,接下来我们把用户名持久化一下,体验就会好很多。 大家可以注意到我们给原来的 持久化用户名用户输入用户名,然后我们把用户名保存到浏览器的 LocalStorage 当中,当页面加载的时候再从 LocalStorage 把之前保存的用户名显示到用户名输入框当中。这样用户就不用每次都输入用户名了,并且评论框是自动聚焦的,用户的输入体验就好很多。 我们监听用户名输入框失去焦点的事件 ... <input value={this.state.username} onBlur={this.handleUsernameBlur.bind(this)} onChange={this.handleUsernameChange.bind(this)} /> ... 在 class CommentInput extends Component { constructor () { super() this.state = { username: '',content: '' } } componentDidMount () { this.textarea.focus() } _saveUsername (username) { localStorage.setItem('username',username) } handleUsernameBlur (event) { this._saveUsername(event.target.value) } ... 在 输入用户名,然后到浏览器里里面看看是否保存了:
然后我们组件挂载的时候把用户名加载出来。这是一种数据加载操作,我们说过,不依赖 DOM 操作的组件启动的操作都可以放在 ... componentWillMount () { this._loadUsername() } _loadUsername () { const username = localStorage.getItem('username') if (username) { this.setState({ username }) } } _saveUsername (username) { localStorage.setItem('username',username) } ...
这样体验就好多了,刷新页面,不需要输入用户名,并且自动聚焦到了输入框。我们 1、 2 需求都已经完成。 小贴士这里插入一些小贴示,大家可以注意到我们组件的命名和方法的摆放顺序其实有一定的讲究,这里可以简单分享一下个人的习惯,仅供参考。 组件的私有方法都用 <CommentInput onSubmit={this.handleSubmitComment.bind(this)} /> 这样统一规范处理事件命名会给我们带来语义化组件的好处,监听( 另外,组件的内容编写顺序如下:
如果所有的组件都按这种顺序来编写,那么维护起来就会方便很多,多人协作的时候别人理解代码也会一目了然。 下一节中我们将介绍《React.js 小书 Lesson26 - 实战分析:评论功能(五)》。 (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |