Хорошо, я схожу с ума. Я пытаюсь сделать как компонент общего сообщения с компонентом snackbar из Material-UI
, и я хочу, чтобы он контролировался redux
. Идея состоит в том, что когда я делаю асинхронный вызов API, состояние в redux установит для свойства show
значение true
, и появится сообщение. Это нормально, и это хорошо. Проблема в том, что когда я нажимаю на кнопку закрытия, она должна отправить функцию закрытия для редукции, и состояние будет установлено в false. Но в консоли появляется сообщение об ошибке:
Неопределенное нарушение инварианта: недопустимый тип элемента: ожидается
строка
(для встроенных компонентов) или класс / функция (для составных компонентов), но
получил: не определено. Вы, вероятно, забыли экспортировать ваш компонент из файла
он определен в, или вы могли смешать импорт по умолчанию и с именами.
Проверьте метод рендеринга SnackbarContentRaw
.
generalMessage.jsx
import { hideMessage } from '../../../actions/action_messages';
const _GeneralMessage = (props) => { return (
<Snackbar
...
open={props.show}
onClose={props.closeMessage}
>
<SnackbarContentWrapper
onClose={props.closeMessage}
...
/>
</Snackbar> ) }
const mapStateToProps = (state) => ({
show: state.mensajes.show,
tipo: state.mensajes.tipo,
mensaje: state.mensajes.mensaje
});
const mapDispatchToProps = (dispatch) => {
return {
closeMessage: () => dispatch( hideMessage() )
}
}
export const GeneralMessage = connect(mapStateToProps, mapDispatchToProps)(_GeneralMessage);
SnackbarContentWrapper.jsx
const SnackbarContentRaw = (props) => {
const { classes, className, message, onClose, variant, ...other } = props;
const Icon = variantIcon[variant];
return (
<SnackbarContent
className={classNames(classes[variant], className)}
aria-describedby="client-snackbar"
message={
<span id="client-snackbar" className={classes.message}>
<Icon className={classNames(classes.icon, classes.iconVariant)} />
{message}
</span>
}
action={[
<IconButton
key="close"
aria-label="Close"
color="inherit"
className={classes.close}
onClick={onClose}
>
<CloseIcon className={classes.icon} />
</IconButton>,
]}
{...other}
/>
);
}
export default withStyles(styles)(SnackbarContentRaw);
action_messages.js
import { HIDE_MESSAGE } from './types/messages';
export const hideMessage = () => {
return { type: HIDE_MESSAGE }
}
Я экспортирую / импортирую что-то не так или это компонент material-ui
? Дайте мне знать, если кому-то понадобится другой файл, и я могу разместить его здесь.
Спасибо