美文网首页
2019-05-10 React小书 学习笔记(二)

2019-05-10 React小书 学习笔记(二)

作者: 追夢的蚂蚁 | 来源:发表于2019-05-11 14:21 被阅读0次

    状态提升

    1. 当某个状态被多个组件依赖或影响时,就该把状态提升到最近公共父组件中管理,用props传递数据或函数来管理这种依赖或影响的行为.

    如何更好的管理这种被多个组件依赖或影响的状态?
    Redux状态管理工具


    挂载阶段的组件生命周期(一)

    我们把 React.js 将组件渲染,并且构造 DOM 元素然后塞入页面的过程称为组件的挂载

    挂载过程Demo
    componentWillMount:组件挂载开始之前,也就是在render之前调用
    componentDidMount:组件挂载完成后,也就是在DOM元素插入页面后调用
    componentWillUnmount:在组件对应DOM元素从页面中删除之前调用


    挂载阶段的组件生命周期(二)

    一般把组件的state的初始化工作放在constructor里去做,在componentWillMount进行组件的启动工作,如果有数据清理就放在componentWillUnmount里面去做
    时钟Demo


    更新阶段的组件生命周期

    更新阶段:就是setState导致React重新渲染组件并把组件的变化应用到DOM元素上的过程,这是一个组件变化的过程

    补充关于更新阶段的组件生命周期:

    1. shouldComponentUpdate(nextProps, nextState):你可以通过这个方法控制组件是否重新渲染。如果返回 false 组件就不会重新渲染。这个生命周期在 React.js 性能优化上非常有用。
    2. componentWillReceiveProps(nextProps):组件从父组件接收到新的 props 之前调用。
    3. componentWillUpdate():组件开始重新渲染之前调用。
    4. componentDidUpdate():组件重新渲染并且把更改变更到真实的 DOM 以后调用。

    ref和react中的DOM操作

    我们可以给任意代表 HTML 元素标签加上 ref 从而获取到它 DOM 元素然后调用 DOM API。但是记住一个原则:能不用 ref 就不用。特别是要避免用 ref 来做 React.js 本来就可以帮助你做到的页面自动更新的操作和事件监听。多余的 DOM 操作其实是代码里面的“噪音”,不利于我们理解和维护。


    props.children和容器类组件

    demo
    嵌套的结构在组件内部都可以通过 props.children 获取到,这种组件编写方式在编写容器类型的组件当中非常有用。


    dangerouslySetHTML和style属性

    demo
    设置 innerHTML 可能会导致跨站脚本攻击(XSS),所以 React.js 团队认为把事情搞复杂可以防止(警示)大家滥用这个属性。这个属性不必要的情况就不要使用。

    <h1 style={{fontSize: '12px', color: 'red'}}>React.js 小书</h1>

    style 接受一个对象,这个对象里面是这个元素的 CSS 属性键值对,原来 CSS 属性中带 - 的元素都必须要去掉 - 换成驼峰命名,如 font-size 换成 fontSize,text-align 换成 textAlign。
    用对象作为 style 方便我们动态设置元素的样式。我们可以用 props 或者 state 中的数据生成样式对象再传给元素,然后用setState 就可以修改样式,非常灵活


    PropTypes 和组件参数验证

    通过 PropTypes 给组件的参数做类型限制,可以在帮助我们迅速定位错误,这在构建大型应用程序的时候特别有用;另外,给组件加上 propTypes,也让组件的开发、使用更加规范清晰。

    这里建议大家写组件的时候尽量都写 propTypes,有时候有点麻烦,但是是值得的。


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

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

    记录下开发的流程:
    1 聚焦评论框(focus())
    2 持久化用户名(在 handleUsernameBlur 中我们把用户输入的内容传给了 _saveUsername 私有方法(所有私有方法都以 _ 开头)。)
    3 持久化评论(JSON.stringify()-JSON.parse())
    4 显示评论发布时间(timeString , duration)
    5 可以删除评论
    6 利用正则添加代码块显示功能如 ``

    comment-app-v2

    相关文章

      网友评论

          本文标题:2019-05-10 React小书 学习笔记(二)

          本文链接:https://www.haomeiwen.com/subject/lgeooqtx.html