箭头函数额外传参,控制表单元素值的显示与改变,其他受控组件

使用箭头函数额外传参{
import ReactDOM from 'react-dom';
import React from 'react';
class Time extends React.Component {
  state = {
    Time: new Date().toLocaleTimeString(),
    stat: [
      { id: '1', naem: 'xx' },
      { id: '2', naem: 'yy' },
      { id: '3', naem: 'zz' }
    ]
  }

  handleClick = (e, id) => {
    this.setState({ Time: new Date().toLocaleTimeString() })
    console.log(e);
    console.log(id);
  }
  render() {
    return (
      <div>
        <h1>{this.state.Time}</h1>
        <button onClick={this.handleClick} >获取当前时间</button>
        {this.state.stat.map((item) => (
          <div key={item.id}>{item.naem}<button onClick={(e) => { this.handleClick(e, item.id) }}>删除</button></div>
        ))}
      </div>
    )
  }
}
ReactDOM.render(<Time />, document.getElementById('root'));

控制表单元素值的显示与改变
import React from 'react';

export class CtrFrom extends React.Component {
  // 1 控制表单元素的显示
  state = {
    txt: 'txt',
    txt2: 'txt2',
    txt3: 'txt3',
  };

  // 表单元素值的变化
  handleTxt = (e) => {
    console.log(e.target.value);
    // 设置组件状态
    this.setState({
      txt: e.target.value,
    });
  };
  handleTxt2 = (e) => {
    console.log(e.target.value);
    // 设置组件状态
    this.setState({
      txt2: e.target.value,
    });
  };
  handleTxt3 = (e) => {
    console.log(e.target.value);
    // 设置组件状态
    this.setState({
      txt3: e.target.value,
    });
  };

  // 提交数据
  handleSubmit = () => {
    // 发起ajax请求
    console.log(this.state);
    const form = {
      name: this.state.txt,
      info: this.state.txt2,
      msg: this.state.txt3,
    };
    console.log(form);
    // .post('', data)
  };

  render() {
    // console.log('render');
    return (
      <div>
        {/* 控制表单元素的变化 */}
        <input type={'text'} value={this.state.txt} onChange={this.handleTxt} />
        <input
          type={'text'}
          value={this.state.txt2}
          onChange={this.handleTxt2}
        />
        <input
          type={'text'}
          value={this.state.txt3}
          onChange={this.handleTxt3}
        />

        <button onClick={this.handleSubmit}>提交</button>
      </div>
    );
  }
}

其他受控组件练习
import React from 'react';
export class OtherForm extends React.Component {
  // constructor() {
  //     super()
  //     // 表单状态
  //     this.state = {
  //        txt:'xx',
  //     }
  //   }
  state = {
    txt: 'xx',
    content: 'content',
    city: 'gz',
    isChecked: true,
  };
  // 文本变化
  handleChange = (e) => {
    // 改变state
    this.setState({
      txt: e.target.value,
    });
  };
  // 文本域变化
  handleContent = (e) => {
    this.setState({
      content: e.target.value,
    });
  };
  // 城市的变化
  handleCity = (e) => {
    this.setState({
      city: e.target.value,
    });
  };
  // 复选框变化
  handleIsChecked = (e) => {
    this.setState({
      isChecked: e.target.checked,
    });
  };

  render() {
    console.log(this.state);
    return (
      <div>
        {/* 文本框 */}
        <input
          type="text"
          value={this.state.txt}
          onChange={this.handleChange}
        ></input>
        <hr />

        {/* 文本域 */}
        <textarea
          value={this.state.content}
          onChange={this.handleContent}
        ></textarea>
        <hr />

        {/* 下拉框 */}
        <select value={this.state.city} onChange={this.handleCity}>
          <option value="sh">上海</option>
          <option value="bj">北京</option>
          <option value="gz">广州</option>
        </select>
        <hr />

        {/* 复选框 */}
        <input
          type="checkbox"
          checked={this.state.isChecked}
          onChange={this.handleIsChecked}
        ></input>
        <hr />
        <button onClick={() => console.log(this.state)}>提交</button>
      </div>
    );
  }
}

代码优化
import React from 'react';
export class OtherForm extends React.Component {
  // constructor() {
  //     super()
  //     // 表单状态
  //     this.state = {
  //        txt:'xx',
  //     }
  //   }
  state = {
    txt: 'xx',
    content: 'content',
    city: 'gz',
    isChecked: true,
  };

  handleChange = (e) => {
    if (e.target.name === 'isChecked') {
      this.setState({
        [e.target.name]: e.target.checked,
      });
    } else {
      // 改变state
      this.setState({
        [e.target.name]: e.target.value,
      });
    }
  };

  render() {
    console.log(this.state);
    return (
      <div>
        {/* 文本框 */}
        <input
          type="text"
          name='txt'
          value={this.state.txt}
          onChange={this.handleChange}
        ></input>
        <hr />

        {/* 文本域 */}
        <textarea
          name='content'
          value={this.state.content}
          onChange={this.handleChange}
        ></textarea>
        <hr />

        {/* 下拉框 */}
        <select value={this.state.city} onChange={this.handleChange} name='city'>
          <option value="sh">上海</option>
          <option value="bj">北京</option>
          <option value="gz">广州</option>
        </select>
        <hr />

        {/* 复选框 */}
        <input
          type="checkbox"
          name='isChecked'
          checked={this.state.isChecked}
          onChange={this.handleChange}
        ></input>
        <hr />
        <button onClick={() => console.log(this.state)}>提交</button>
      </div>
    );
  }
}
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值