美文网首页
用React做一个表单

用React做一个表单

作者: mensionyu | 来源:发表于2018-12-01 00:55 被阅读0次
image.png

项目结构

image.png

是不是感觉挺大的,src目录是开发目录

  • 做一个Tabble组件
    代码说明一切,刚学react这就是它的风格没什么好解释的
import React, {Component} from 'react';
import TableHeader from "./TableHeader";
import TableBody from "./TableBody";

class Table extends Component {
    render() {
        console.log(this.props);
        const {characterData,removeCharacter} = this.props

        return(
            <table className="table table-striped">
                <TableHeader />
                <TableBody  characterData= {characterData}
                removeCharacter=
                {removeCharacter}/>
            </table>
        )
    }
}
export default Table

React中有两种组件,容器型组件和提供slot和表现型组件。
点击删除是如何删除的
先看App.js代码

import React, { Component } from 'react';
import Table from './Table'
import Form from './Form';

class App extends Component {
  state={
     characters:[
      {
        'name':'唐唐',
        'job':'FE'
      },
      {
        'name':'唐马儒',
        'job':'鉴宝师'
      },
      {
        'name':'唐僧',
        'job':'国师'
      }
    ]
    
  }
  render () {
    const {characters}=this.state;
    

    return (
      <div className="container">
        <Table  characterData={characters}
        removeCharacter={this.removeCharacter}/>
        <Form handleSubmit={this.handleSubmit}/>
      </div>
    )
  }
  removeCharacter=index=>{
    const { characters }=this.state;
    this.setState({
      characters:characters.filter(
        (character,i)=>{
          return i!==index
        }
      )
    })
  }
  handleSubmit=character=>{
    this.setState({
      characters:[character,...this.state.characters]
    })
  }
}
export default App

<Table characterData={characters} removeCharacter={this.removeCharacter}/>
Table.js如何获得呢?

import React, {Component} from 'react';
import TableHeader from "./TableHeader";
import TableBody from "./TableBody";

class Table extends Component {
    render() {
        console.log(this.props);
        const {characterData,removeCharacter} = this.props

        return(
            <table className="table table-striped">
                <TableHeader />
                <TableBody  characterData= {characterData}
                removeCharacter={removeCharacter}/>
            </table>
        )
    }
}
export default Table

this.props获取 characters和removeCharacter方法,传递给子组件。const {characterData,removeCharacter} = this.props解构
使用子组件的时候再传递
<TableBody characterData= {characterData} removeCharacter={removeCharacter}/>
子组件在获取,子组件是个表现型组件,方法组件


import React, { Component } from 'react';

const TableBody = (props)=>{
//    console.log(props);
   //函数式组件,纯函数
   console.log(props)
   const rows = props.characterData.map((row,index)=>{
        return(
            <tr key={index}>
                <td>{row.name}</td>
                <td>{row.job}</td>
                <td><a className="btn
                btn-primary" herf="javascript:;
                "onClick={()=>props.removeCharacter(index)}>删除</a>
                </td>
            </tr>
            )
        });
        return <tbody>{rows}</tbody>;
}
export default TableBody

点击删除获取当前点击的数组项下标,利用App.js里的函数删除 ---so easy
提交表单

import React, { Component } from 'react';

class Form extends Component {
  constructor () {
    super();
    // 子组件, state
    this.initialState = {
      name: '',
      job: ''
    };
    this.state = this.initialState;
  }
  render () {
    const { name, job }= this.state;
    console.log(this.state)
    return (
      <form className="form-group">
        <div className="form-field">
          <label>Name</label>
          <input
          className="form-control"  
          type="text"
          value={name}
          name="name"
          onChange={this.handleChange}
          />
        </div>
        <div className="form-field">
          <label>job</label>
          <input
          className="form-control"
          value={job}
          name="job"
          onChange={this.handleChange}
          type="text"/>
        </div>
        <div className="form-field">
            <input type="button"
            value="Submit"
            className="btn btn-primary"
            onClick={()=>{this.submitForm()}}/>
        </div>
      </form>
    );
  }
  submitForm=()=>{
      this.props.handleSubmit(this.state);
      this.setState(this.initialState)
  }
  handleChange = event => {
    const {name , value} = event.target
    console.log(event);
    console.log(name+'------'+value)
    this.setState({
        [name]:value
    })
  }
  componentDidMount(){
      const url='https://en.wikipedia.org/w/api.php?action=opensearch&search=Seona+Dancing&format=json&origin=*';
      fetch(url)
      .then(result=>result.json())
      .then(result=>{
          this.setState({
              data:result
          })
      })
  }
}

export default Form;

组建中删除按钮的点击组件onClick={()=>props.removeCharacter(index)
Form组件中的提交表单按钮点击事件onClick={()=>{this.submitForm()}}
是一样的道理 使this指向组件自身 不指向事件发生时的按钮,从而可以setState()

相关文章

  • 用React做一个表单

    项目结构 是不是感觉挺大的,src目录是开发目录 做一个Tabble组件代码说明一切,刚学react这就是它的风格...

  • 用 React 和 PHP 构建一个联系人表单

    用 React 和 PHP 构建一个联系人表单 用 react 建立一个联系表格,并在你的 PHP 或 Wordp...

  • React 学习笔记(一)

    学习目的 熟练使用 React,并能运用 React 做一个项目,了解 React 开发。 学习技巧,用学...

  • 5-React 组件之表单与受控非受控组件

    React.js [TOC] 表单 在 React 里, HTML 表单元素的工作方式和其他的 DOM ...

  • React学习笔记_03

    React 表单处理 表单受控组件 html中的表单元素是可输入的,也就是有自己的可变状态 React中可变状态通...

  • React

    React 表单与事件 React 简单介绍 React 入门实例教程 Github-react-demos 从一...

  • 深入React技术栈:表单

    表单 在React中一些数据都是状态的表现,其中当然也包括表单数据,今天我们了解一下React中是如何处理表单数据...

  • 受控组件

    1、定义 渲染表单的 React 组件还控制着用户输入过程中表单发生的操作。被 React 以这种方式控制取值的表...

  • React 列表与表单

    列表 在React中,拿到一组数据后,一般会用map方法来遍历渲染。 表单 HTML 表单元素与 React 中的...

  • react表单

    在web应用开发中,表单的作用尤为重要,正是因为表单的存在,才使得用户能够与web应用进行富交互。 文本框 你会发...

网友评论

      本文标题:用React做一个表单

      本文链接:https://www.haomeiwen.com/subject/wztlcqtx.html