基本使用
npm i react react-dom
react包核心 提供创建元素、组件等功能
react-dom包提供dom相关功能
脚手架安装
初始化项目命令 npx create-react-app 项目名
npx create-react-app object
创建React元素
const vdom = React.createElement('p',null,'脚手架');
渲染元素
ReactDOM.render(vdom,document.querySelector('#root'));
运行到浏览器
npm start
JSX
JavaScript XML 用js写html
jsx不是标准的es语法,浏览器不能直接识别,可以借助babel这样的工具编译处理
语法
1 不能用引号
2 属性名用驼峰命名法 class->className tabindex->tabIndex for->htmlFor
3 没有子节点的React元素可与使用/>结束
4 jsx语法结构推荐使用小括号包裹起来
函数组件的写法:
function Hello(){
return (<h1>Hello 函数组件</h1>)
}
ReactDOM.render(<Hello />,document.querySelector('#root'))
1、函数名一定要大写,否则
2、函数必须要有返回值,否则
3、返回值为null表示不渲染任何内容
箭头函数写法:
const Hello = ()=>{
return (<h1>Hello 函数组件</h1>)
}
ReactDOM.render(<Hello />,document.querySelector('#root'))
效果如下
遍历li标签
import React from "react";
import ReactDOM from "react-dom";
const data = [
{
id:1,
name: 'zs'
},
{
id: 2,
name: 'lisi'
},
{
id: 3,
name: 'wangwu'
}
];
let ul = (
<ul>
{data.map(item=> <li className="demo" key={item.id} style={ {color: 'red',backgroundColor: '#00f'} }>{item.name}</li>)}
</ul>
)
ReactDOM.render(ul,document.querySelector('#root'));
类组件
1、类名称必须首字母大写
2、类组件继承Reaact.Component
3、类组件必须提供render()
4、必须要有返回值
/* 类组件 */
class Hello extends React.Component{
render(){
return (<h1>Hello 函数组件!!</h1>)
}
}
ReactDOM.render(<Hello />,document.querySelector('#root'))
//ReactDOM.render(<Hello></Hello>,document.querySelector('#root'))
组件化写法:
// 创建Hi组件
import React from "react";
class Hi extends React.Component{
render(){
return(<h1>Hi,everyone</h1>)
}
}
// 导出
export default Hi
在index.js中引入
import Hi from "./Hi";
ReactDOM.render(<Hi />,document.querySelector('#root'))
渲染点击事件
第一种写法 :
import React from "react";
import ReactDOM from "react-dom";
// 事件绑定
class App extends React.Component{
render(){
return (<input type="button" onClick={()=>{
console.log('已经被点击!');
}} value="按钮"/>)
}
}
ReactDOM.render(<App></App>,document.querySelector('#root'))
第二种写法:放在原型的实例化上面
import React from "react";
import ReactDOM from "react-dom";
// 事件绑定
class App extends React.Component{
handleClick() {
console.log('已经被点击!');
}
render(){
return (<input type="button" onClick={this.handleClick} value="按钮"/>)
}
}
ReactDOM.render(<App></App>,document.querySelector('#root'))
第三种写法
function App() {
function handleClick() {
console.log('我被点击了');
}
return (<input type="button" onClick={this.handleClick} value="按钮"/>)
}
ReactDOM.render(<App></App>,document.querySelector('#root'))
import React from "react";
import ReactDOM from "react-dom";
/* class App extends React.Component{
constructor() {
super()
// 初始化状态
this.state = {
num: 0
}
}
render(){
return (<div>有状态组件</div>)
}
} */
class App extends React.Component{
state = {
num: 100,
}
render(){
return (<div>有状态组件 <button onClick={()=>{
// 只能通过setState来修改数据
this.setState({
num: this.state.num +1
})
}}>+1</button>{this.state.num}<button onClick={()=>{
// 只能通过setState来修改数据
this.setState({
num: this.state.num -1
})
}}>-1</button></div>)
}
}
ReactDOM.render(<App/>,document.querySelector('#root'))