javascript - React 组件未连接到商店
问题描述
我一直在使用它来创建以下内容。
import React from 'react';
import ReactDOM from 'react-dom';
import {connect} from 'react-redux';
import PropTypes from 'prop-types';
import {Alert, No} from './pure/Icons/Icons';
import Button from './pure/Button/Button';
import Modal from './pure/Modal/Modal';
import {setWarning} from '../actions/app/appActions';
const WarningModal = ({withCleanup, message, isWarning}) => {
const [
title,
text,
leave,
cancel
] = message.split('|');
console.log(isWarning)
const handleOnClick = () => {
setWarning(false);
withCleanup(true);
}
return(
<Modal>
<header>{title}</header>
<p>{text}</p>
<Alert />
<div className="modal__buttons-wrapper modal__buttons-wrapper--center">
<button
onClick={() => withCleanup(false)}
className="button modal__close-button button--icon button--icon-only button--text-link"
>
<No />
</button>
<Button id="leave-warning-button" className="button--transparent-bg" onClick={() => handleOnClick()}>{leave}</Button>
<Button id="cancel-warning-button" onClick={() => withCleanup(false)}>{cancel}</Button>
</div>
</Modal>
);
}
WarningModal.propTypes = {
withCleanup: PropTypes.func.isRequired,
message: PropTypes.string.isRequired,
isWarning: PropTypes.bool.isRequired
};
const mapStateToProps = state => {
return {
isWarning: state.app.isWarning
}
};
connect(mapStateToProps, {
setWarning
})(WarningModal);
export default (message, callback) => {
const modal = document.createElement('div');
document.body.appendChild(modal);
const withCleanup = (answer) => {
ReactDOM.unmountComponentAtNode(modal);
document.body.removeChild(modal);
callback(answer);
};
ReactDOM.render(
<WarningModal
message={message}
withCleanup={withCleanup}
/>,
modal
);
};
我需要调度一个操作来更新控制“WarningModal”可见性的状态属性(“isWarning”),但这似乎并没有将我的组件连接到商店:
connect(mapStateToProps, {
setWarning
})(WarningModal);
ConfigureStore.js
...
return createStore(
combineReducers(reducers),
composeEnhancers(
applyMiddleware(...middlewares)
)
);
...
解决方案
应该有
export default connect(mapStateToProps, {
setWarning
})(WarningModal);
这样,您就可以导入 redux 连接组件进行渲染(在单独的文件中) - 在您的版本中,渲染需要原始(未连接)组件进行挂载,
它可以在一个文件中完成,但不建议这样做。
推荐阅读
- python - pytube urllib.error.HTTPError:HTTP 错误 404:未找到
- ruby-on-rails - Paperclip 4.2 ruby 2.7.2 警告:URI.escape 已过时
- apache-spark - 如果不兼容,如何运行 Apache Zeppelin 0.9.0 和 Apache Spark 3.1.1?
- python - 为什么我在解析 XML 时会收到解析错误 parse error
- pine-script - 显示带有 strategy.exit 结果的标签
- sorting - 二进制搜索算法代码不会执行
- python - 查找所有匹配的单词并获取它们的数量
- mysql - Laravel如何格式化子查询
- mongodb - 如何在 mongo db 多个数据库中为现有用户启用身份验证
- vue.js - 以编程方式与 vue-multiselect 交互