React快速开发迷你记账簿------day06 创建表单

day 06 创建表单

本节目标:实现这个表单

在这里插入图片描述

Records.js文件添加如下代码

  ...
  render(){
      const { error, isLoaded, records } = this.state;
      let recordsComponents;//添加组件
  
      if (error) {
        recordsComponents =  <div>Error:{error.message}</div>;
      }
      else if (!isLoaded) {
        recordsComponents  = <div>Loading...</div>;
      } else {
        recordsComponents = (
            <table className="table table-bordered">
              <thead>
                <tr>
                  <th>Date</th>
                  <th>Title</th>
                  <th>Amount</th>
                </tr>
  
              </thead>
              <tbody>
                {records.map((record) => <Record key={record.id} {...record} />)}
              </tbody>
            </table>
        );
      }
     
      
      //在这里重构return  
      return (
        <div>
              <h2>Records</h2>
         		//在这里添加表单组件...
          	<RecordForm />
              {recordsComponents}
        </div>
      )
  }
  ...

新建RecordForm.js组件

src/components/RecordForm.js

在这里创建一个新的表单 name属性为 date

  import React, { Component } from 'react';
  export default class RecordForm extends Component {
      render() {
          return (
            <form className = "form-inline">
                <div className = "form-group">
              	<input type="text" className="form-control" placeholder ="Date" name="date"/>
                </div>
                <div className = "form-group">
              	<input type="text" className="form-control" placeholder ="Title" name="title"/>
                </div>
                <div className = "form-group">
              	<input type="text" className="form-control" placeholder ="Amount" name="amount"/>
                </div>
                <button type="submit" className="btn btn-primary">Create Record</button>
            </form>
          )
      }
  }

添加字段,将三个格子填满时,才可以点击确认按钮

  • 添加constructor()构造方法
  • 如何判断三个都有值才能点亮按钮 ,此时写一个方法 valid()
  • <button disabled = {true}>Create Record</button>
  • disabled = {true} 表示:按钮默认不可点
  • 使用disabled = {!this.valid()}对valid()方法取反,使按钮可点
  • valid加括号()表示要执行这个方法
  import React, { Component } from 'react';
  export default class RecordForm extends Component {
    constructor(props){
      super(props);
      this.state = {
        date:"",
        title:"",
        amount:""
      }
    }
  
    //这个方法用来判断三个框同时有值是否有效
    valid(){
      return this.state.date && this.state.title && this.state.amount;
    }
  
      render() {
          return (
            <form className = "form-inline">
                <div className = "form-group">
              	<input type="text" className="form-control" placeholder ="Date" name="date" value = {this.state.date}/>
                </div>
                <div className = "form-group">
              	<input type="text" className="form-control" placeholder ="Title" name="title" value = {this.state.title}/>
                </div>
                <div className = "form-group">
              	<input type="text" className="form-control" placeholder ="Amount" name="amount" value = {this.state.amount}/>
                </div>
                <button type="submit" className="btn btn-primary" disabled = {!this.valid()}>Create Record</button>
            </form>
          )
      }
  }

在这里插入图片描述

此时发现无论点击什么按钮都无法操作输入框的值

  • 这时要添加onChange()方法

  • ...
    //创建handleChange()方法
     handleChange(event){
       let name, obj;
       name = event.target.name;
       this.setState((
         obj = {},
         obj["" + name] = event.target.value,
         obj
       ))
     }
     ...
    
+ `RecordForm.js`现在的完整代码

  ```js
  import React, { Component } from 'react';
  export default class RecordForm extends Component {
    constructor(props){
      super(props);
      this.state = {
        date:"",
        title:"",
        amount:""
      }
    }
  
    //这个方法用来判断三个框同时有值是否有效
    valid(){
      return this.state.date && this.state.title && this.state.amount;
    }
  
    //创建handleChange()方法
    handleChange(event){
      let name, obj;
      name = event.target.name;
      //console.log( event.target.name);//date title amount
      this.setState((
        obj = {},
        obj["" + name] = event.target.value,
        obj
      ))
      //console.log(event.target.value);
    }
      render() {
          return (
            <form className = "form-inline">
                <div className = "form-group">
              	<input type="text" className="form-control"  onChange = {this.handleChange.bind(this)} placeholder ="Date" name="date" value = {this.state.date}/>
                </div>
                <div className = "form-group">
              	<input type="text" className="form-control" onChange = {this.handleChange.bind(this)} placeholder ="Title" name="title" value = {this.state.title}/>
                </div>
                <div className = "form-group">
              	<input type="text" className="form-control" onChange = {this.handleChange.bind(this)} placeholder ="Amount" name="amount" value = {this.state.amount}/>
                </div>
                <button type="submit" className="btn btn-primary" disabled = {!this.valid()}>Create Record</button>
            </form>
          )
      }
  }
  • 将值输入完整发现可以点击按钮了

1540793056585

Edit 06_CreateForm

https://github.com/lenvo222/06_CreateForm.git

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

小李科技

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值