react-study-one

16 篇文章 0 订阅
1 篇文章 0 订阅
react 学习第一天
待办事件. demo
组件1 待办事件处理模块
import React, { Component } from 'react';

import Todolist from './Todolist';

import FormContent from './FormContent';

export class Index extends Component {
  constructor(props) {
    super(props);
    this.refForm = React.createRef();
    this.state = {
      // 待办事件
      todolist: [],
    };
  }
  Sunbmit = e => {
    console.log(e, 'aaa');
    e.id = new Date().valueOf();
    this.setState({
      todolist: [...this.state.todolist, ...[e]],
    });
  };

  // 删除代办事件
  delTodo = val => {
    console.log(val, 'del');
    let toolistCopy = JSON.parse(JSON.stringify(this.state.todolist));
    let idx = toolistCopy.findIndex(item => item.id == val.id);
    if (idx != -1) {
      toolistCopy.splice(idx, 1);
      this.setState({
        todolist: toolistCopy,
      });
    }
  };
  render() {
    return (
      <div style={{ marginTop: '20px' }}>
        <FormContent onSunbmit={this.Sunbmit}></FormContent>
        <Todolist Todolistdata={this.state.todolist} delTodo={this.delTodo}></Todolist>
      </div>
    );
  }
}

export default Index;

待办事件展示模块
import React, { Component } from 'react';

import { Button, List } from 'antd';

export default class Todolist extends Component {
  constructor(props) {
    super(props);
    this.state = {
      Todolistdata: [{ name: '111' }],
    };
  }

  componentDidMount() {
    this.setState({
      Todolistdata: this.props.Todolistdata,
    });
    console.log(this.props.Todolistdata);
  }

  del = val => {
    this.props.delTodo(val);
  };

  render() {
    const { Todolistdata } = this.props;
    console.log(this.props);
    return (
      <div>
        <List
          header={<div>头部</div>}
          footer={<div>删除</div>}
          bordered
          dataSource={Todolistdata}
          renderItem={item => (
            <List.Item>
              姓名:{item.name},年纪:{item.num}
              <Button
                onClick={e => {
                  this.del(item);
                }}
                type="primary"
              >
                删除
              </Button>
            </List.Item>
          )}
        />
      </div>
    );
  }
}

待办事件新增模块 (antd 中的form。值得研究)。
import React, { Component } from 'react';
import { Form, Input, Button, Select, DatePicker, Switch, message, TimePicker } from 'antd';

import Todolist from './Todolist';
import locale from 'antd/lib/date-picker/locale/zh_CN';
import 'moment/locale/zh-cn';
import moment from 'moment';
moment.locale('zh-cn');

export default class FormContent extends Component {
  constructor(props) {
    super(props);
    this.refForm = React.createRef();
    this.state = {
      formInit: {
        name: '', // 名称
        sex: 'woman',
        date: null, // 时间
        check: false,
        timerType: 'day', // 类型
        num: '1', //数量
        fixed: '', //固定日期
        start: '', // 开始位置
        end: '', // 结束位置
      },
    };
  }

  // 渲染时间框架
  renderTime = _ => {
    const { formInit } = this.state;
    let str = '';
    switch (formInit.timerType) {
      case 'day':
        str = <DatePicker.RangePicker locale={locale} style={{ width: '100%' }} format="YYYY-MM-DD" />;
        break;
      case 'hour':
        str = <TimePicker.RangePicker locale={locale} style={{ width: '100%' }} format="hh" />;
        break;
      case 'minuts':
        str = <TimePicker.RangePicker locale={locale} style={{ width: '100%' }} format="mm" />;
        break;
      default:
        break;
    }
    return str;
  };

  submit = _ => {
    console.log('提交');
    const data = this.refForm.current.getFieldValue();
    console.log(data);
    this.props.onSunbmit(data);

    // this.setState({
    //   todolist: [...this.state.todolist, { ...data, ...{ id: new Date().valueOf() } }],
    // });
    // this.state.todolist = [...this.state.todolist, { ...data, ...{ id: new Date().valueOf() } }];
    this.refForm.current.resetFields();
    // console.log(this.state.todolist, 'this.props.Todolistdata,');
  };
  // computer date   // 计算时间区间
  computerDate = _ => {
    let start = this.refForm.current.getFieldValue('start').toUpperCase();
    let end = this.refForm.current.getFieldValue('end').toUpperCase();
    let count = 0;
    if (start && end) {
      console.log({ start, end });
      let startNum = start.replace(/[^0-9]/gi, '');
      let endNum = end.replace(/[^0-9]/gi, '');
      // [a-z]
      let startStr = start.replace(/[^a-zA-Z]/gi, '');
      let endStr = end.replace(/[^a-zA-Z]/gi, '');
      if (startStr != endStr && startNum != endNum) {
        message.error('请输入正确区间');
      }
      // 同一列
      if (startStr == endStr) {
        count = Math.abs(startNum - endNum);
        console.log(count, '同一列');
      }
      // 同一行
      if (startNum == endNum) {
        count = Math.abs(startStr.charCodeAt() - endStr.charCodeAt());
        console.log(count, '同一行');
      }
      this.refForm.current.setFieldsValue({ num: count });
    }
  };

  render() {
    return (
      <Form labelCol={{ span: 4 }} wrapperCol={{ span: 14 }} initialValues={this.state.formInit} layout="horizontal" ref={this.refForm}>
        <Form.Item label="测点名称" name="name">
          <Input />
        </Form.Item>
        <Form.Item label="性别" name="sex">
          <Select
            onChange={e => {
              this.setState({
                formInit: { ...this.state.formInit, ...{ sex: e } },
              });
            }}
          >
            <Select.Option value="man">男</Select.Option>
            <Select.Option value="woman">女</Select.Option>
          </Select>
        </Form.Item>

        <Form.Item label="应用区间">
          <Input.Group compact>
            <Form.Item name="start" noStyle>
              <Input style={{ width: '50%' }} onBlur={this.computerDate} />
            </Form.Item>
            <Form.Item name="end" noStyle>
              <Input style={{ width: '50%' }} onBlur={this.computerDate} />
            </Form.Item>
          </Input.Group>
        </Form.Item>
        <Form.Item label="时间类型">
          <Input.Group compact>
            <Form.Item name="timerType" noStyle>
              <Select
                style={{ width: '50%' }}
                onChange={e => {
                  this.setState({
                    formInit: { ...this.state.formInit, ...{ timerType: e } },
                  });
                }}
              >
                <Select.Option value="day">天</Select.Option>
                <Select.Option value="hour">小时</Select.Option>
                <Select.Option value="minuts">分钟</Select.Option>
              </Select>
            </Form.Item>
            <Form.Item name="num" noStyle>
              <Input style={{ width: '50%' }} placeholder="Input street" />
            </Form.Item>
          </Input.Group>
        </Form.Item>
        <Form.Item label="时间" name="date">
          {/* {this.state.formInit.timerType == 'day' ? <DatePicker locale={locale} style={{ width: '100%' }} format={this.state.formInit.sex === 'man' ? 'YYYY-MM-DD' : 'YYYY-MM-DD'} /> : ''} */}

          {this.renderTime()}
        </Form.Item>

        <Form.Item label="切换" valuePropName="checked" name="check">
          <Switch
            onChange={e => {
              this.setState({
                formInit: { ...this.state.formInit, ...{ check: e } },
              });
            }}
          />
        </Form.Item>
        {this.state.formInit.check ? (
          <Form.Item label="固定日期" name="fixed">
            <DatePicker.RangePicker style={{ width: '100%' }} locale={locale} format="YYYY-MM-DD" />
          </Form.Item>
        ) : (
          ''
        )}

        <Form.Item label="Button">
          <Button onClick={this.submit}>提交</Button>
        </Form.Item>
      </Form>
    );
  }
}

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值