创建项目 函数组件(无状态组件),负责静态结构展示 类组件(有状态组件),负责更新UI,让页面动起来 函数组件绑定事件 通过类组件绑定事件 react事件对象 state基本使用 受控组件:其值受到React控制的表单元素 非受控组件,不推荐使用,知道即可
执行“nvm list”命令,查看当前所选择node的版本,因为我电脑上有几个不同的node版本,所以需要确认下,版本是否是react脚手架要求的。
如果发现node版本不是我们想要的,执行“nvm use 版本号”命令即可。
执行“npx create-react-app react-component”命令,创建项目。 执行“cd react-component”命令,进入文件夹内 执行“npm start”命令,启动项目,ok
import React from 'react'; import ReactDOM from 'react-dom';
function Hello() { return (<div>这是我的第一个函数组件</div>)}
const Hello = () => (<div>这是我的第二个函数组件</div>)
ReactDOM.render(<Hello/>, document.getElementById('root'))
class Hello extends React.Component { render() { return (<div>第一个类组件</div>) } }
ReactDOM.render(<Hello/>, document.getElementById('root'))
function App() { // 事件处理程序 function handleClick() { console.log('函数组件,事件触发') } return ( <button onClick={handleClick}>点我</button> ) }
ReactDOM.render(<App/>, document.getElementById('root'))
class App extends React.Component { // 事件处理程序 handleClick() { console.log('类组件绑定事件,触发') } render() { return (<button onClick={this.handleClick}>点我</button>) }}
ReactDOM.render(<App/>, document.getElementById('root'))
class App extends React.Component { // 事件处理程序 handleClick(e) { // 阻止浏览器的默认行为 e.preventDefault() console.log('a标签单击事件触发') } render() { return (<a href='https://www.baidu.com/' onClick={this.handleClick}>百度一下</a>) }}
ReactDOM.render(<App/>, document.getElementById('root'))
// 2、创建类组件class App extends React.Component { // 初始化state state = { count: 100} // 事件处理程序 onIncrement = () => { this.setState({ count : this.state.count - 1 }) } render() { return ( <div> <h1>计数器:{this.state.count}</h1> <button onClick={this.onIncrement}> -1 </button> </div> ) }}
ReactDOM.render(<App/>, document.getElementById('root'))
class App extends React.Component { state = { txt: '', content: '', language: 'java', isChecked: false } // 处理变化 handleForm = e => { // 获取当前DOM对象 const target = e.target // 根据表单类型获取值 const value = target.type === 'checkbox' ? target.checked : target.value // 获取name const name = target.name // 根据name属性设置对应state this.setState({ [name]: value }) } render() { return ( <div> {/* 文本框 */} <input type='text' name='txt' value = {this.state.txt} onChange={this.handleForm}/> <br/> {/* 富文本框 */} <textarea name='content' value={this.state.content} onChange={this.handleForm}></textarea> <br/> {/* 下拉框 */} <select name='language' value={this.state.language} onChange={this.handleForm}> <option value='java'>java</option> <option value='javaScript'>javaScript</option> <option value='c'>C</option> </select> <br/> {/* 复选框 */} <input name='isChecked' type='checkbox' checked={this.state.isChecked} onChange={this.handleForm}/> </div> ) } }
ReactDOM.render(<App/>, document.getElementById('root'))
class App extends React.Component { constructor(){ super() // 创建ref this.txtRef = React.createRef() } // 获取文本框的值 getTxt = () => { console.log('文本框值为:', this.txtRef.current.value); } render() { return ( <div> <input type='text' ref={this.txtRef}/> <button onClick={this.getTxt}>获取文本框的值</button> </div> ) } }
ReactDOM.render(<App/>, document.getElementById('root'))
|