美文网首页
antdesign模态框+穿梭框闪现问题

antdesign模态框+穿梭框闪现问题

作者: 赵兜兜zz | 来源:发表于2018-08-01 16:04 被阅读0次
闪现原因

onchange时的setState导致重新渲染

handleChange = (targetKeys) => {
    this.setState({ targetKeys }); 
  }
解决方法

把Modal单独抽离到一个组件中,将Modal的显示隐藏(visible)放到了子组件中

// 新建TransferModal
import React, { Component } from 'react';
import { Modal,Transfer } from 'antd';

class TransferModal extends Component {

  constructor(props) {
    super(props);
    this.state = {
      visible: false,
    };
  }

  showModelHandler = (e) => {
    if (e) e.stopPropagation();
    this.setState({
      visible: true,
    });
  };

  hideModelHandler = () => {
    this.setState({
      visible: false,
    });
  };

  okHandler = () => {
    this.setState({
      visible: false,
    });
  }

  filterOption = (inputValue, option) => {
    return option.description.indexOf(inputValue) > -1;
  };

  handleChange = (targetKeys) => {
    this.props.changeTargetKeys(targetKeys)
  };

  render() {
    const { children } = this.props;
    return (
      <span>
        <span onClick={this.showModelHandler}>
          { children }
        </span>
        <Modal
          title={this.props.title}
          visible={this.state.visible}
          onOk={this.okHandler}
          onCancel={this.hideModelHandler}
        >
          <Transfer
            titles={['可加入的组','已选择的组']}
            dataSource={this.props.dataSource}
            showSearch
            filterOption={this.filterOption}
            targetKeys={this.props.targetKeys}
            onChange={this.handleChange}
            render={item => item.name}
          />
        </Modal>
      </span>
    );
  }
}

export default TransferModal;

父组件异步获取数据,修改state,TransferModal中穿梭框的onchange传回父组件进行处理。

//父组件中获取数据
  getGroupData = () => {
    const { dispatch } = this.props;
    dispatch({
      type: 'listGroup/fetch',
    }).then((data) => {  //这里需要在effects中return一下,才能拿到回调
      this.setState({ groupData:data.data.list })
    });
  };

  handleGroupModalChange = (targetKeys) => {
    this.setState({ targetKeys });
  };
<TransferModal
  dataSource={this.state.groupData}
  filterOption={this.filterOption}
  targetKeys={this.state.targetKeys}
  changeTargetKeys={(targetKeys) => this.handleGroupModalChange(targetKeys)}
  title="加入组"
>
  <a>加入群组</a>
</TransferModal>

model文件中effects的return

effects: {
    * fetch({ payload }, { call, put }) {
      const response = yield call(queryGroup, payload);
      yield put({
        type: 'save',
        payload: response,
      });
      return {
        data: response,
      };
    },
  }

相关文章

  • antdesign模态框+穿梭框闪现问题

    闪现原因 onchange时的setState导致重新渲染 解决方法 把Modal单独抽离到一个组件中,将Moda...

  • bootstrap模态框多层嵌套,背景滚动

    问题:在弹出模态框A的基础上,弹出模态框B,关闭模态框B之后,模态框A不能滚动(由于A模块框内容) 造成的原因:遮...

  • 第十三节 MFC的一些概念

    一、模态对话框和非模态对话框Windows对话框分为两类:模态对话框和非模态对话框。模态对话框是这样的对话框,当它...

  • element-ui dialog组件嵌套bug

    模态框嵌套模态框 只需在子集的模态框里面添加append-to-body 就可以了 父级模框 子集模态框 我这样嵌...

  • 进阶任务10-事件应用

    实现Tab切换的功能 实现下图的模态框功能,点击模态框不隐藏,点击关闭以及模态框以外的区域模态框隐藏

  • AntDesign表格+模态框编辑+VUX

    之前有说过可编辑的表格 今天我说一下不可编辑的表格里面包含了antDesign的图片上传和编辑器等的添加和修改的方...

  • 事件的应用

    1. 实现如下图Tab切换的功能 2. 实现下图的模态框功能,点击模态框不隐藏,点击关闭以及模态框以外的区域模态框隐藏

  • 进阶任务10

    1.实现如下图Tab切换的功能 2.实现下图的模态框功能,点击模态框不隐藏,点击关闭以及模态框以外的区域模态框隐藏

  • 事件的应用

    1.实现如下图Tab切换的功能: 2.实现下图的模态框功能,点击模态框不隐藏,点击关闭以及模态框以外的区域模态框隐藏

  • 【bootstrap modal】记一次模态框无法弹出问题排查过

    0x01 问题描述 通过angularjs的$modal服务弹出模态框 触发addMark()函数后,看不见模态框...

网友评论

      本文标题:antdesign模态框+穿梭框闪现问题

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