只争朝夕 不负韶华
React使用JSX来代替常规的JavaScipt。
JSX是一个看起来很像XML的JavaScript语法扩展。
我们不需要一定使用JSX,但它有以下优点:
1 | const element = <h1>Hello,world!</h1>; |
1 | var myDivElement = <div className="foo" />; |
JSX看起来类似HTML,我们可以看下实例:
1 | ReactDOM.render( |
我们可以在以上代码中嵌套多个HTML标签,需要使用一个div元素包裹它,实例中的p元素添加了自定义属性data-myattribute
,添加自定义属性需要使用data-
前缀。
1 | ReactDOM.render( |
你的React JSX代码可以放在一个单独的文件上,例如我们创建一个helloworld_react.js文件,代码如下:
1 | ReactDOM.render( |
然后再HTML文件中引入该JS文件:
1 | <body> |
我们可以在JSX中使用JavaScript表达式。表达式写在花括号{}中。实例如下:
1 | ReactDOM.render( |
在JSX中不能使用if else语句,但可以使用conditional(三元运算)表达式来代替,以下实例中如果变量i等于1浏览器将输出true,如果修改i的值,则会输出false
1 | ReactDOM.reder( |
React推荐使用内联样式。我们可以使用camlCase语法来设置内联样式,React会在指定元素数字后自动添加px。以下实例演示了为h1元素添加myStule内联样式:
1 | var myStyle = { |
注释需要写在花括号内,实例如下:
1 | ReactDOM.render( |
JSX允许在模板中插入数组,数组会自动展开所有成员:
1 | var arr = [ |
元素是构成React应用得最小单位
1 | const element = <h1>Hello,world!</h1>; |
与浏览去得DOM元素不同,React当中的元素事实上是普通的对象,React DOM可以确保浏览器DOM的数据内容与React元素保持一致。
首先我们在HTML页面中添加一个id="example"
的<div>
1 | <div id="example"></div> |
在此div中的所有内容都将由React DOM来管理,所以我们将其成为”根“DOM节点
我们用React开发应用时一般只会定义一个根节点,但如果你是一个在已有的项目中引用React的话,你可能会需要在不同的部分单独定义React根节点。
要将React元素渲染到根DOM节点中,我们通过把他们都传递给ReactDOM.render()
的方法来将其渲染到页面中:
1 | const element = <h1>Hello,world!</h1>; |
React元素都是不可变的。当元素被创建之后,你是无法改变其内容或者属性的
目前更新界面的唯一办法激素hi创建一个新的元素,然后将他传入ReactDOM.render()方法:
来看一下这个计时器的例子:
1 | function tick(){ |
以上实例通过setinterval()方法。
我们可以将要展示的部分封装起来,以下实例用一个函数来表示:
1 | function Clock(props){ |
除了函数外我们还可以创建一个React.Component的ES6类,该类封装了要展示的元素,需要注意的是render()方法中,需要使用this.props
替代props
:
React只会更新必要的部分
1 | class Clock extends React.Component{ |
指的主义的是React DOM首先会比较元素内容先后的不同,而在渲染过程中只会更新改变了的部分。
React可以直接下载使用
直接使用Staticfile CDN的React CDN库,地址如下:
1 | <script src="https://cdn.staticfile.org/react/16.4.0/umd/react.development.js"></script> |
官方提供的CDN地址
1 | <script src="https://unpkg.com/react@16/umd/react.development.js"></script> |
注意:在浏览器中使用Bael编译JSX效率是非常低的。
使用示例
以下示例输出了,Hello,world!
1 | <!DOCTYPE html> |
实例解析:
实例中我们引入了三个库:react.min.js,react-dom.min.js和babel.min.js
1 | ReactDOM.render( |
1 | npm install -g cnpm --registry=https://registry.npm.taobao.org |
create-react-app 是来自于 Facebook,通过该命令我们无需配置就能快速构建 React 开发环境。
create-react-app 自动创建的项目是基于 Webpack + ES6 。
执行以下命令创建项目:
1 | cnpm install -g create-react-app |
项目的目录结构如下:
1 | my-app/ |
manifest.json 指定了开始页面 index.html,一切的开始都从这里开始,所以这个是代码执行的源头。
1 | 尝试修改 src/App.js 文件代码: |
1、进入Ubuntu,打开一个终端
2、sudo passwd root
3、输入新密码,确认密码。
4、修改密码成功,切换至管理员账号su root,输入新密码,成功
1、进入Ubuntu,打开一个终端,输入 sudo su转为root用户。 注意,必须先转为root用户!!!
2、sudo passwd user(user 是对应的用户名)
3、输入新密码,确认密码。
4、修改密码成功,重启,输入新密码进入Ubuntu
备份源文件并更改源
1 | sudo cp /etc/apt/sources.list /etc/apt/sources.list.bak |
把里面的都注释,然后直接把完整源放在文件后面
1 | deb https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ bionic main restricted universe multiverse |
执行
1 | sudo apt-get update |
1 | sudo apt-get install xorg |
npm install -g n
报错
1 | npm ERR! notsup Unsupported platform for n@2.1.8: wanted |
解决方案
1 | npm install -g n -force |
1 | internal/modules/cjs/loader.js:584 |
结局方案:删除npm系统文件夹内的node_modules中的create-react-app文件夹
然后执行命令
1 | cnpm install -g create-react-app |
1 | Failed to compile |
import React, {Component,Fragment} from ‘react’;
import { render } from ‘react-dom’;
class TodoList extends Component {
render(){
return (
)
}
}
export default TodoList;
1 | ## React中得响应式设计思想和事件绑定 |
TypeError: Cannot read property ‘state’ of undefined
handleInputChange
D:/react/todolist/src/TodoList.js:33
30 | )
31 | }
32 | handleInputChange(e) {
33 | this.state.inputValue= e.target.value;
34 | // console.log(e.target.value);
35 | }
36 | }
View compiled▶ 22 stack frames were collapsed. This screen is visible only in development. It will not appear if the app crashes in production. Open your browser’s developer console to further inspect this error. Click the 'X' or hit ESC to dismiss this message.
1 | this只想问题 |
tag:
缺失模块。
1、请确保node版本大于6.2
2、在博客根目录(注意不是yilia根目录)执行以下命令:
npm i hexo-generator-json-content --save
3、在根目录_config.yml里添加配置:
jsonContent: meta: false pages: false posts: title: true date: true path: true text: false raw: false content: false slug: false updated: false comments: false link: false permalink: false excerpt: false categories: false tags: true