美文网首页
发起和处理事件

发起和处理事件

作者: SingleDiego | 来源:发表于2019-03-10 23:19 被阅读0次

本例中,我们的 Students 组件会包含多个 Student 组件。

在 React 中,每个组件只能操作自身的 state。假如需要在 Student 组件需要执行一个事件来操作 Students(比如删除一个 student 对象的操作,这需要操作 Studentsstate),要怎么办呢?

我们可以在 Students 组件定义相关方法,然后把该方法作为参数传递到 Student 组件中渲染。在 Student 中可以通过 props.参数名 来调用。

import React, { Component } from 'react';

class Student extends Component{
  state = {
    student: this.props.student,
  };

  render() {
    return (
      <table>
        <tbody>
          <tr>
            <td>name: {this.state.student.name}</td>
            <td>age: {this.state.student.age}</td>
            <td>
            <button 
              // 调用了 onDelete 方法
              // 也就是 students 组件的 handleDelete 方法
              // 把 student 组件自身的 id 作为参数
              // 从而修改 students 组件的 state
              onClick={() => this.props.onDelete(this.props.student.id)}
            >
              Delete
            </button>
            </td>
          </tr>
        </tbody>
      </table>
    );
  };
}


class Students extends Component{
  state = {
    students: [
      {id:1, name:'tom', age:12},
      {id:2, name:'jim', age:13},
      {id:3, name:'tim', age:14},
    ]
  };

  handleDelete = (studentID) => {
     // 处理删除 student 的方法
    // 输入一个 studentID,然后生成不包含该 id 的 student 列表
    // 最后修改 Students 组件的 state
    const students = this.state.students.filter(student => 
      student.id !== studentID);
    this.setState({students});
  };

  render() {
    return(
      <div>
        {this.state.students.map(student => 
          <Student 
            key={student.id} 
            // 在这里我们直接把 student 对象作为参数传递给 student 组件
            // 在 student 组件调用时使用:props.student
            student={student}
            // 这里把 handleDelete 方法作为参数传递给 student 组件
            // student 组件调用该方法,应使用:props.onDelete()
            onDelete={this.handleDelete}
            />
        )}
      </div>
    );
  };
}

export default Students;

相关文章

  • 发起和处理事件

    本例中,我们的 Students 组件会包含多个 Student 组件。 在 React 中,每个组件只能操作自身...

  • 【复习向】RAC的学习总结笔记

    RAC的作用以及使用场景 场景:一个事件的出现,导致需要发起某个业务的处理 作用:将事件所对应的待处理业务封装在B...

  • App事件中心

    App事件中心,事件的的生产端和处理端分离,事件处理结果广播通知,事件状态(初始化、处理中和处理完成)管理,事件类...

  • react文档——事件处理

    事件处理 React 元素的事件处理和 DOM 元素的事件处理非常相似。但也有一些语法差异: React 事件使用...

  • JavaScript函数02

    目录 常用事件和事件处理函数 递归函数 函数的属性和方法 函数的作用域 常用事件和事件处理函数 事件参考--MDN...

  • 事件处理

    HTML事件处理程序 DOM0级事件处理程序 DOM2级事件处理程序 addEventListener()和rem...

  • 关于Android的几种事件处理

    Android事件处理通常和控件相结合,通常有以下几种事件处理模型:•(一)事件监听的处理模型 • (二)基于监听...

  • 3.3 iOS事件的传递和处理

    1.3事件的传递和处理 (一)事件的产生和传递 事件传递的作用就是找到合适的view来处理事件 1.当发生触摸事件...

  • 关于Android的几种事件处理

    Android事件处理通常和控件相结合,通常有以下几种事件处理模型:•(一)事件监听的处理模型 • 二)基于监听的...

  • 网络线程和工作线程

    和客户端和机器人通讯使用老的网络的多线程框架。三个半事件从网络发起到工作线程,进入脚本处理后经由工作线程发送。 (...

网友评论

      本文标题:发起和处理事件

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