经验首页 前端设计 程序设计 Java相关 移动开发 数据库/运维 软件/图像 大数据/云计算 其他经验
当前位置:技术经验 » JS/JS库/框架 » JavaScript » 查看文章
(办公)探秘react教程20210331
来源:cnblogs  作者:六一儿童节  时间:2021/4/6 10:10:06  对本文有异议

1.create-react-app my-react创建项目
2.npm start启动项目,项目启动是localhost:3000端口
3.Props传递数据:

  1.   const user = {
  2.     name: "Anna",
  3.     hobbies: ['A','B']
  4.   }
  5. <Home name={"Max"} age={12} user={user}/>
  6. 子组件:
  7.     {this.props.name}
  8.                    <p></p>
  9.                    {this.props.age}
  10.                    <ul>
  11.                      {this.props.user.hobbies.map((hobby) => <li key={hobby}>{hobby}</li>)}
  12.                    </ul>

3.1.propType判定传递过来得类型:

  1. import PropTypes from "prop-types";
  2. Home.propTypes = {
  3.   name: PropTypes.string,
  4.   age: PropTypes.number,
  5.   user: PropTypes.object
  6. }

3.2.子标签,也可以通过props.children来获取并展示:

  1. <Home name={"Max"age={12} user={user}>
  2.                        <p>I am child</p>
  3.              </Home>
  4. Home组件下:
  5.  <div>
  6.                  {this.props.children}  
  7.               </div> 
  8. PropTypes判定子节点是否传递过来:
  9. children: PropTypes.element.isRequired

4.事件

  1.  onMakeOlder() {
  2.       this.age += 3;
  3.       console.log(this.age);
  4.     }
  5. 调动事件,事件on后面第一个字母大写,同时需要绑定this
  6. onClick={this.onMakeOlder.bind(this)}
  7. onClick={() => {this.onMakeOlder()}} 箭头函数
  8. 还可以通过constructor构造方法
  9. 为了在回调中使用 `this`,这个绑定是必不可少的    this.handleClick = this.handleClick.bind(this);
  10. 补充构造方法:
  11. 初始化构造方法,类初始化得方法,拿到props,方法参数里写起来.
  12.     constructor(props){
  13.       super(props);
  14.       this.age = this.props.age
  15.         // 为了在回调中使用 `this`,这个绑定是必不可少的    this.handleClick = this.handleClick.bind(this);
  16.     }  

5.state

  1. state窗台,通过与用户的交互,实现不同状态,然后渲染 UI,让用户界面和数据保持一致。React 里,只需更新组件的 state,然后根据新的 state 重新渲染用户界面
  2. 1.constructor里声明这个对象
  3. // 初始化构造方法,类初始化得方法,拿到props,方法参数里写起来.
  4.     constructor(props){
  5.       super(props);
  6.       this.age = this.props.age
  7.         // 为了在回调中使用 `this`,这个绑定是必不可少的    this.handleClick = this.handleClick.bind(this);
  8.         this.state = {
  9.            age: this.props.age
  10.         }
  11.     }
  12. 2.展示
  13. <p>{this.state.age}</p>
  14.  
  15. 3.改变通过事件
  16.   onMakeOlder() {
  17.       this.setState({
  18.         age: this.state.age + 3
  19.       });
  20.       console.log(this.state.age);
  21.     }

6.react更新dom
 虚拟得dom,这个dom和上一个虚拟得dom比较,diff,比较出来结果,找到需要改变得,进行重新渲染.

  1. 1.可以在constructor设置一个state得值,然后定时任务只改变一次:
  2.    setTimeout(() => {
  3.           this.setState({
  4.             status: 1
  5.           })
  6.         },3000 )

7.无状态组件:

  1. state并且改变,这种叫做有状态组件.
  2. 无状态式得组件,也叫做函数式组件
  3. 类方式组件:
  4. import React,{Component} from "react";
  5. class Header extends Component {
  6.     render(){
  7.         return (
  8.            <div className="container">
  9.              <div className="row">
  10.                  <div className="col-xs-1 col-xs-offset-11">
  11.                    <h1>Header</h1>
  12.                  </div>
  13.               </div> 
  14.            </div>
  15.         )
  16.     }
  17. }
  18. export default Header
  19. 函数式组件(重构):
  20. import React from "react";
  21. const Header = (props) => {
  22.     return (
  23.         <div className="container">
  24.           <div className="row">
  25.               <div className="col-xs-1 col-xs-offset-11">
  26.                 <h1>Header</h1>
  27.               </div>
  28.           </div> 
  29.         </div>
  30.     )
  31. }
  32. export default Header
  33. 写法分为3种:
  34. 1.es5: React.createClass
  35. 2.es6写法:React.Component
  36. 3.无状态函数写法
  37. 1.无需state,即不处理用户得输入,组件得所有数据都是依赖props传入得。
  38. 2.不需要用到生命周期得函数.
  39. 无状态组件得好处:
  40. 1.不需要声明类,可以避免大量得譬如extends或者constructor这样得代码
  41. 2.无需要显示得声明this关键字,在ES6得类声明中往往需要将函数得this关键字绑定到当前作用域,而因为函数式声明得特性,我们不需要再强制绑定。
  42. 补充无状态组件是没有生命周期得,如果需要生命周期,需要高阶组件.

8.子组件向父组件传值:回调函数来处理

  1. 1.父组件定义方法:
  2.   onGreet(age) {
  3.     alert("Hello" + age)
  4.   }
  5. 2.子组件去调用,传递参数
  6.    handleGreet() {
  7.       this.props.greet(this.state.age)//父组件得方法,传递子组件得值.
  8.     }

9.兄弟组件之间得传递值

通过父组件就可以:子组件得方法,改变父组件,父组件传递给另外一个兄弟组件.

10.双向数据绑定在react中应该如何实现:

  1. 常用于表单
  2. onChange值会变化.
  3. value得设置会随着状态得变化而变化
  4. DefaultValue可以设置一下默认值
  5. <input type="text" defaultValue={this.props.initName}  value={this.state.initName}  onChange={(event) => this.onHandleChange(event)} /><br/>
  6. onHandleChange(event){
  7.       this.setState({
  8.        homelink: event.target.value
  9.       })
  10.      }

11.组件得生命周期:

  1. 组件的生命周期可分成三个状态:
  2. Mounting:已插入真实 DOM
  3. Updating:正在被重新渲染
  4. Unmounting:已移出真实 DOM
  5. 生命周期的方法有:
  6. 1.componentWillMount 在渲染前调用,在客户端也在服务端
  7. 2.componentDidMount 在第一次渲染后调用,只在客户端。之后组件已经生成了对应的DOM结构,可以通过this.getDOMNode()来进行访问。 如果你想和其他JavaScript框架一起使用,可以在这个方法中调用setTimeout, setInterval或者发送AJAX请求等操作(防止异步操作阻塞UI)。
  8. 3.componentWillReceiveProps在组件接收到一个新的 prop (更新后)时被调用。这个方法在初始化render时不会被调用。
  9. 4.shouldComponentUpdate返回一个布尔值。在组件接收到新的props或者state时被调用。在初始化时或者使用forceUpdate时不被调用。
  10. 可以在你确认不需要更新组件时使用。
  11. 5.componentWillUpdate在组件接收到新的props或者state但还没有render时被调用。在初始化时不会被调用。
  12. 6.componentDidUpdate在组件完成更新后立即调用。在初始化时不会被调用。
  13. 7.componentWillUnmount在组件从 DOM 中移除之前立刻被调用。
  14. 1.挂载时用得方法(componentWillMount,componentDidMount )
  15. 2.更新得时候用得方法(componentWillReceiveProps,
  16. shouldComponentUpdate,
  17. componentWillUpdate
  18. componentDidUpdate
  19. )
  20. 3 组件卸载得时候componentWillUnmount
  21. 第一阶段:
  22. 1.Constructor
  23. 2.componentWillmount
  24. 3.render渲染
  25. 4.componentDidMount
  26. 第二阶段:
  27. 1.componentWillReceiveProps
  28. 2.shouldComponentUpdate
  29. 3.componentWillUpdate
  30. 4.Render()
  31. 5.componentDidUpdate

官网,不甚了解得可以上官网去瞅瞅:
https://zh-hans.reactjs.org/docs/handling-events.html

 

原文链接:http://www.cnblogs.com/historylyt/p/14603194.html

 友情链接:直通硅谷  点职佳  北美留学生论坛

本站QQ群:前端 618073944 | Java 606181507 | Python 626812652 | C/C++ 612253063 | 微信 634508462 | 苹果 692586424 | C#/.net 182808419 | PHP 305140648 | 运维 608723728

W3xue 的所有内容仅供测试,对任何法律问题及风险不承担任何责任。通过使用本站内容随之而来的风险与本站无关。
关于我们  |  意见建议  |  捐助我们  |  报错有奖  |  广告合作、友情链接(目前9元/月)请联系QQ:27243702 沸活量
皖ICP备17017327号-2 皖公网安备34020702000426号