zoukankan      html  css  js  c++  java
  • react-redux: modal

    1.actionTpye

    export const INCREMENT = 'INCREMENT';
    export const DECREMENT = 'DECREMENT';
    
    export const OPENMODAL = 'OPENMODAL';
    export const CLOSEMODAL = 'CLOSEMODAL';
    export const CONFIRM = 'CONFIRM';

    2.create action:

    import {createAction} from "redux-actions";
    
    import {OPENMODAL, CLOSEMODAL, CONFIRM} from "constant/ActionType";
    
    export  const openModal = createAction(OPENMODAL);
    export  const closeModal = createAction(CLOSEMODAL);
    export  const handleConfirm = createAction(CONFIRM);

    3.modal reducer:

    import {OPENMODAL, CLOSEMODAL, CONFIRM} from "constant/ActionType";
    
    const initialState = {
        visible: false,
        message: "Admin"
    };
    
    const MessageModalReducer = (state = initialState, action) => {
        const visible = state.visible;
        let message = state.message;
        switch (action.type) {
            case OPENMODAL:
            case CLOSEMODAL:
                return {
                    message,
                    visible: !visible
                };
            case CONFIRM:
                message = "confirm message";
                return {
                    message: message,
                    visible: !visible
                };
            default:
                return state;
        }
    };
    
    export default MessageModalReducer;

    4.use 

    import React from "react";
    import {connect} from "react-redux";
    import {Row, Col, Button} from "antd";
    
    import * as actions from "../../reduxModel/actions/CounterAction";
    import {closeModal, openModal, handleConfirm} from "reduxModel/actions/ModalAction";
    import MessageModal from "modals/message-modal/MessageModal";
    import "./index.scss";
    
    const mapStateToProps = state => {
        return {
            message: state.MessageModalReducer.message,
            messageModalVisible: state.MessageModalReducer.visible
        }
    };
    const mapDispatchToProps = {
        openMessageModal: openModal,
        closeMessageModal: closeModal,
        handleConfirm: handleConfirm
    };
    
    class Home extends React.Component {
    
        constructor(props) {
            super(props);
        }
    
        render() {
            const {message, openMessageModal, closeMessageModal, messageModalVisible, handleConfirm} = this.props;
            return (
                <div className="app-home">
                    <div className="app-layout-container">
                        <Row type="flex" justify="center" className="app-layout-body">
                            <Col span={24} className="page-panel">
                                welcome Home,{message}
                                <div>
                                    <Button type="primary" htmlType="button"
                                            onClick={openMessageModal}>plan</Button>
                                </div>
                            </Col>
                        </Row>
                    </div>
                    <MessageModal title="task detail info"
                                  modalVisible={messageModalVisible}
                                  handleOk={handleConfirm}
                                  handleCancel={closeMessageModal}>
                        <DetailMapping type="plan"/>
                    </MessageModal>
                </div>
            )
        }
    }
    
    const HomeContainer = connect(
        mapStateToProps,
        mapDispatchToProps
    )(Home);
    
    export default HomeContainer;

    detailMapping:

    import React from "react";
    
    import PlanDetail from "page/demo/detail/PlanDetail";
    import ManagerDetail from "page/demo/detail/ManagerDetail";
    
    class DetailMapping extends React.Component{
    
        render () {
            const detailMapping = {
                "plan": <PlanDetail />,
                "manager": <ManagerDetail />
            };
            return (
                <div>{detailMapping[this.props.type]}</div>
            )
        }
    }
    
    export default DetailMapping;

    6. modal:

    import React from "react";
    import {Modal} from "antd";
    
    const MessageModal = props => {
    
        const {title, handleOk, handleCancel, modalVisible} = props;
    
        return (
            <Modal title={title}
                   okText="confirm"
                   cancelText="cancel"
                   onOk={handleOk}
                   onCancel={handleCancel}
                   visible={modalVisible}>
                {props.children}
            </Modal>
        )
    };
    
    export default MessageModal;
  • 相关阅读:
    写在读ng之前的基础知识----笔记
    angularJS中-$route路由-$http(ajax)的使用
    angular学习-入门基础
    grunt使用watch和livereload的Gruntfile.js的配置
    jQuery1.4源码解读
    Handlebars的使用方法文档整理(Handlebars.js)
    zepto源代码解读
    CentOS 安装rz和sz命令
    Linux下*.tar.gz文件解压缩命令
    Linux下用rm删除的文件的恢复方法
  • 原文地址:https://www.cnblogs.com/Nyan-Workflow-FC/p/9244012.html
Copyright © 2011-2022 走看看