采集自动组合(本文是学习React笔记,对应视频为的10-13节 )

优采云 发布时间: 2021-10-14 07:04

  采集自动组合(本文是学习React笔记,对应视频为的10-13节

)

  本文为学习React笔记,对应视频为:10-13节。

  一、组件组合使用

  问题:数据存储在哪个组件中?

  查看数据时是否需要某个组件,或者是否需要某个组件?

  问题二:在子组件中改变父组件的状态

  子组件不能直接改变父组件的状态

  状态在哪个组件中,更新状态的行为应该在哪个组件中定义

  父组件定义函数并传递给子组件

  基于组件的写函数的过程:

  1. 拆分组件

  2. 实现静态组件(只有静态接口,没有动态数据和交互)

  3. 实现动态组件

  1)实现初始化数据的动态显示

  2)实现交互功能

  

SimpleList

class App extends React.Component {

constructor(props) {

super(props);

//初始化状态

this.state = {

todos: ['吃饭', '睡觉', '打代码']

}

this.addTodo = this.addTodo.bind(this)

}

addTodo(todo) {

const {todos} = this.state

todos.unshift(todo)

//更新状态

this.setState({

todos: todos

})

}

render() {

const {todos} = this.state

return (

Simple TODO List

)

}

}

class Add extends React.Component {

constructor(props) {

super(props);

this.add = this.add.bind(this)

}

add() {

//1. 读取输入的数据

const todo = this.todoInput.value.trim()

//2. 检查合法

if (!todo) {

return

}

//3. 添加

this.props.addTodo(todo)

//4. 清除

this.todoInput.value = ''

}

render() {

return (

this.todoInput = input}/>

add #{this.props.count + 1}

)

}

}

Add.propTypes = {

count: PropTypes.number.isRequired,

addTodo: PropTypes.func.isRequired

}

class List extends React.Component {

render() {

const {todos} = this.props

return (

{

todos.map((todo, index) => {todo})

}

)

}

}

List.propTypes = {

todos: PropTypes.array.isRequired

}

ReactDOM.render(, document.getElementById('simple'))

  二、采集表单数据

  要求:自定义收录表单的组件

  1. 界面收录用户名和密码

  2. 输入用户名和密码后,点击登录提示

  3. 不提交表单

  收录表单的组件的分类:

  受控组件:表单输入数据可以自动采集状态

  不受控制的组件:需要手动读取表单输入框中的数据

  

Form

class LoginForm extends React.Component {

constructor(props) {

super(props);

//初始化状态

this.state = {

pwd: ''

}

this.handleSubmit = this.handleSubmit.bind(this)

this.handleOnChange = this.handleOnChange.bind(this)

}

handleSubmit(event) {

const name = this.nameInput.value

//用 {} 后相当于 const pwd = this.state.pwd

const {pwd} = this.state

alert(`准备提交的账号是:${name},密码是${pwd}`)

//阻止事件的默认行为(提交表单)

event.preventDefault()

}

handleOnChange(event) {

//读取输入的值

const pwd = event.target.value;

//更新pwd状态(pwd恰好一致可以省略 pwd:)

this.setState({pwd})

}

render() {

return (

用户名: this.nameInput = input}/>

密码:

)

}

}

ReactDOM.render(, document.getElementById('form'))

0 个评论

要回复文章请先登录注册


官方客服QQ群

微信人工客服

QQ人工客服


线