使用 React、Redux 和 Immutable.js 创建模态弹出窗口
Creating modal popups with React, Redux, and Immutable.js
在我的项目中,我希望能够为登录和注册帐户等事情调度模式弹出窗口。我遇到的问题是我希望它们能够用于任何目的,但我不确定如何以"React 方式"做到这一点。起初,我想这样做:
/常量/模态.js
export const DISPATCH = 'MODAL/DISPATCH';
export const UPDATE = 'MODAL/UPDATE';
export const DISMISS = 'MODAL/DISMISS';
/动作/模态.js
import {
DISPATCH,
UPDATE,
DISMISS
} from '../constants/Modal';
export function dispatch(type, props) {
return {
type: DISPATCH,
payload: {type, props}
};
}
export function update(props) {
return {
type: UPDATE,
payload: {props}
};
}
export function dismiss() {
return {type: DISMISS};
}
/减速器/模态.js
import {Map} from 'immutable';
import {
DISPATCH,
UPDATE,
DISMISS
} from '../constants/Modal';
const initialState = Map({
type: '',
props: Map(),
isDispatched: false
});
export default function modalReducer(state = initialState, action) {
switch (action.type) {
case DISPATCH:
return state.set('type', action.payload.type)
.set('props', Map(action.payload.props))
.set('isDispatched', true);
case UPDATE:
return state.set('props', Map(action.payload.props));
case DISMISS:
return state.set('isDispatched', false);
default:
return state;
}
}
然后,组件将触发这些操作,然后 ModalContainer 组件将根据state.modal.get('type')
呈现相应的弹出窗口,并将state.modal.get('props')
传递给模态组件。这样做的问题是道具最终会包括组件的子项和各种方法,这些方法在商店中没有业务。如何在不执行类似 React.render(<Modal {...props}>, document.getElementById('modal-container'))
的操作的情况下从不是 ModalContainer 组件子级的组件中渲染弹出窗口?
我在这个答案中描述了一种类似的模态对话方式。
根据我的经验,我只是不会使用有效载荷传递不可序列化的道具。
与其传递子项,我会将行为封装在适当的模态组件本身中,例如 <DeleteUserModal kind='sad' userId={42} hasErrors={false} />
.然后,DeleteUserModal
根据需要连接到存储、检索所需的数据、调度操作以及选择要呈现的子项。
或者,您可以完全避免通过 Redux 路由模态,而只需使用类似 react-modal 的东西,它实际上为您执行此操作:
做一些像
React.render(<Modal {...props}>, document.getElementById('modal-container'))?
这样的阿西宁
(这不是asinine,人们称这种模式为"门户"。
- 将数据传递给由服务创建的Ionic模态
- 创建一个模态指令,并将click事件绑定到angular js中
- 在模态窗口上创建 cookie
- 创建一个模态窗口以使用 AngularJS 加载数据
- Angularjs $compiling模态窗口内容创建孤立的控制器
- 创建 iframe 嵌入并使用模态
- 在每个show()上创建新的模态对话框
- 获取<输入类型=“;文本“>它是在模态中动态创建的
- 在何处创建与控制器无关的角度模态对话框(角度材质)
- AngularJS在创建后将参数传递给模态
- 在onclick中创建和显示模态
- AngularJS模态不't将创建的值返回给数组
- 我试图在模态中创建动态表进行摊销
- 超链接与变量创建一个模态框/弹出
- 使用Backbone.js创建一个模态
- 在Yii中使用RenderPartial创建一个模态搜索
- 如何创建多个模态来显示不同的数据
- 无法关闭从母版页创建的Ajax ModalPopupExtender模态窗口
- Javascript /如何创建一个适当的模态页面覆盖
- 创建一个自定义Jquery模态表单来上传数据