react学习(marksheng)

向右看齐 2022-09-02 04:12 244阅读 0赞

第一步(安装工具,生成项目,启动项目)

通过 npm 使用 React

  1. 使用淘宝定制的 cnpm (gzip 压缩支持) 命令行工具代替默认的 npm
  2. npm install -g cnpm --registry=https://registry.npm.taobao.org
  3. npm config set registry https://registry.npm.taobao.org

使用 create-react-app 快速构建 React 开发环境

create-react-app 是来自于 Facebook,通过该命令我们无需配置就能快速构建 React 开发环境。

create-react-app 自动创建的项目是基于 Webpack + ES6 。

执行以下命令创建项目:

  1. $ cnpm install -g create-react-app
  2. $ create-react-app my-app
  3. $ cd my-app/
  4. $ npm start
  1. React 代码的书写格式和以前的 JS 有很大的不同,下面通过对这段代码进行分析了解一下他。
  2. 以前使用 JavaScript 定义一个变量使用 varES6 加入了 const 关键字,用来定义一个常量:
  3. const div = document.createElement('div');
  4. ReactDOM.render(...) 是渲染方法,所有的 js,html 都可通过它进行渲染绘制,他有两个参数,内容和渲染目标 js 对象。
  5. 内容就是要在渲染目标中显示的东西,可以是一个 React 部件,也可以是一段HTMLTEXT文本。渲染目标JS对象,就是一个DIVTABEL,或TD HTML的节点对象。
  6. ReactDOM.render(<App />, div);
  7. unmountComponentAtNode() 这个方法是解除渲染挂载,作用和 render 刚好相反,也就清空一个渲染目标中的 React 部件或 html 内容。
  8. ReactDOM.unmountComponentAtNode(div);

第二步React 元素渲染(两个参数:内容和渲染目标 js 对象)

  1. <div id="example"></div>
  2. const element = <h1>Hello, world!</h1>;
  3. ReactDOM.render(
  4. element,
  5. document.getElementById('example')
  6. );

第三步更新元素渲染

React 元素都是不可变的。当元素被创建之后,无法改变其内容或属性。

目前更新界面的唯一办法是创建一个新的元素,然后将它传入 ReactDOM.render() 方法:

  1. function tick() {
  2. const element = (
  3. <div>
  4. <h1>Hello, world!</h1>
  5. <h2>现在是 {new Date().toLocaleTimeString()}.</h2>
  6. </div>
  7. );
  8. ReactDOM.render(
  9. element,
  10. document.getElementById('example')
  11. );
  12. }
  13. setInterval(tick, 1000);
  14. Hello, world!
  15. 现在是 上午10:34:04.

React 只会更新必要的部分

值得注意的是 React DOM 首先会比较元素内容先后的不同,而在渲染过程中只会更新改变了的部分。

第四步React JSX

React 使用 JSX 来替代常规的 JavaScript。

优点:

  • JSX 执行更快,因为它在编译为 JavaScript 代码后进行了优化。
  • 它是类型安全的,在编译过程中就能发现错误。
  • 使用 JSX 编写模板更加简单快速。

example:

var myDivElement =

; ReactDOM.render(myDivElement, document.getElementById(‘example’));

ReactDOM.render(

Hello, world!

, document.getElementById(‘example’) );

注意:

由于 JSX 就是 JavaScript,一些标识符像 classfor 不建议作为 XML 属性名。作为替代,React DOM 使用 classNamehtmlFor 来做对应的属性。

  1. 独立文件
  2. 你的 React JSX 代码可以放在一个独立文件上,例如我们创建一个 helloworld_react.js 文件,
  3. 然后在 HTML 文件中引入该 JS 文件
  4. JavaScript 表达式
  5. 我们可以在 JSX 中使用 JavaScript 表达式。表达式写在花括号 {} 中。
  6. JSX 中不能使用 if else 语句,但可以使用 conditional (三元运算) 表达式来替代。
  7. eg:
  8. ReactDOM.render(
  9. <div>
  10. <h1>{i == 1 ? 'True!' : 'False'}</h1>
  11. </div>
  12. ,
  13. document.getElementById('example')
  14. );
  15. 样式
  16. React 推荐使用内联样式。我们可以使用 camelCase 语法来设置内联样式. React 会在指定元素数字后自动添加 px
  17. 以下实例演示了为 h1 元素添加 myStyle 内联样式:
  18. eg
  19. var myStyle = {
  20. fontSize: 100,
  21. color: '#FF0000'
  22. };
  23. ReactDOM.render(
  24. <h1 style = {myStyle}>菜鸟教程</h1>,
  25. document.getElementById('example')
  26. );
  27. 注释
  28. 注释需要写在花括号中,实例如下:
  29. React 实例
  30. ReactDOM.render(
  31. <div>
  32. <h1>菜鸟教程</h1>
  33. {/*注释...*/}
  34. </div>,
  35. document.getElementById('example')
  36. );
  37. 数组
  38. JSX 允许在模板中插入数组,数组会自动展开所有成员:
  39. React 实例
  40. var arr = [
  41. <h1>菜鸟教程</h1>,
  42. <h2>学的不仅是技术,更是梦想!</h2>,
  43. ];
  44. ReactDOM.render(
  45. <div>{arr}</div>,
  46. document.getElementById('example')
  47. );

第五步React 组件

  1. 封装一个输出 "Hello World!" 的组件,组件名为 HelloMessage
  2. React 实例
  3. function HelloMessage(props) {
  4. return <h1>Hello World!</h1>;
  5. }
  6. const element = <HelloMessage />;
  7. ReactDOM.render(
  8. element,
  9. document.getElementById('example')
  10. );
  11. 实例解析:
  12. 1、我们可以使用函数定义了一个组件:
  13. function HelloMessage(props) {
  14. return <h1>Hello World!</h1>;
  15. }
  16. 你也可以使用 ES6 class 来定义一个组件:
  17. class Welcome extends React.Component {
  18. render() {
  19. return <h1>Hello World!</h1>;
  20. }
  21. }
  22. 2const element = <HelloMessage /> 为用户自定义的组件。
  23. 注意,原生 HTML 元素名以小写字母开头,而自定义的 React 类名以大写字母开头,比如 HelloMessage 不能写成 helloMessage。除此之外还需要注意组件类只能包含一个顶层标签,否则也会报错。
  24. 如果我们需要向组件传递参数,可以使用 this.props 对象,实例如下:
  25. React 实例
  26. function HelloMessage(props) {
  27. return <h1>Hello {props.name}!</h1>;
  28. }
  29. const element = <HelloMessage name="Runoob"/>;
  30. ReactDOM.render(
  31. element,
  32. document.getElementById('example')
  33. );
  34. 尝试一下 »
  35. 以上实例中 name 属性通过 props.name 来获取。
  36. 注意,在添加属性时, class 属性需要写成 className for 属性需要写成 htmlFor ,这是因为 class for JavaScript 的保留字。

复合组件

  1. 我们可以通过创建多个组件来合成一个组件,即把组件的不同功能点进行分离。
  2. 以下实例我们实现了输出网站名字和网址的组件:
  3. React 实例
  4. function Name(props) {
  5. return <h1>网站名称:{props.name}</h1>;
  6. }
  7. function Url(props) {
  8. return <h1>网站地址:{props.url}</h1>;
  9. }
  10. function Nickname(props) {
  11. return <h1>网站小名:{props.nickname}</h1>;
  12. }
  13. function App() {
  14. return (
  15. <div>
  16. <Name name="菜鸟教程" />
  17. <Url url="http://www.runoob.com" />
  18. <Nickname nickname="Runoob" />
  19. </div>
  20. );
  21. }
  22. ReactDOM.render(
  23. <App />,
  24. document.getElementById('example')
  25. );

ShoppingList是一个 React 组件类/组件类型。一个组件接收一些参数,我们把这些参数叫做 props(特性),然后通过 render 方法返回需要展示在屏幕上的视图的层次结构。

render 方法的返回值描述了你希望在屏幕上看到的内容。React 根据描述,然后把结果展示出来。更具体地来说,render 返回了一个 React 元素,这是一种对渲染内容的轻量级描述。大多数的 React 开发者使用了一种名为 “JSX” 的特殊语法,JSX 可以让你更轻松地书写这些结构。语法 <div /> 会被编译成 React.createElement('div')

三个核心依赖包的功能分别如下:

  1. react.js:React核心库。
  2. react-dom.js:提供操作DOM的react扩展库。
  3. babel.min.js:解析JSX语法代码转为JS代码的库。

发表评论

表情:
评论列表 (有 0 条评论,244人围观)

还没有评论,来说两句吧...

相关阅读

    相关 React学习

    React根本上其实就是一个JavaScript库。 它体现了前后分离的思想,将部分组装页面的工作转交给浏览器来完成;不像JSP文件,页面的布局和填入数据是在服务器完成后发送

    相关 React学习

    [七个不可错过的 React 组件库与开发框架][React] [在 2017 年学习 React + Redux 的一些建议(上篇)][2017 _ React _ Red

    相关 react 学习

    react\_learning 1.state负责存储组件里的数据 / JSX中使用JS表达式需要使用\{\}包裹表达式 “value=\{this.state.inp