Boa tarde, Esto tentando deixar meus Alertas reutilizáveis hoje toda tela de exercício que faço que preciso mandar um Alerta para o usuário por exemplo: "ERRO: Campo nome do banco está em branco". Eu importo os componentes e faço os alertas no próprio arquivo, por exemplo.
//Banco.js
import React, { Component } from 'react';
import { ToastContainer, toast } from 'react-toastify';
export default class Banco extends Component {
//Outros metodos
notify = (type, msg) => {
if (!toast.isActive(this.toastId)) {
switch (type) {
case 'codigo':
this.toastId = toast.error('CODIGO está em BRANCO', {
position: toast.POSITION.TOP_RIGHT,
autoClose: 3000
});
break;
default:
// do nothing
}
}
}
validaCadastro = () => {
if (this.state.banco.codigo.length === 0) {
this.notify('codigo', '');
return;
}
}
//Mais codigo
render() {
return (
// Mais codigo
<ToastContainer
hideProgressBar={true}
newestOnTop={true}
/>
);
}
Não teria uma maneira de passar os atributos que preciso que tenha no alerta por meio de Props ? Pois fiz isso com um modal:
//Modal.js
import React from 'react';
import { Container, Modal, ModalBody, ModalHeader, ModalFooter } from 'mdbreact';
class MyModal extends React.Component {
constructor(props) {
super(props);
this.state = {
modal: false,
selectedOption: '',
};
}
render() {
return (
<Container>
<Modal size={this.props.tamanho} isOpen={this.props.modal}>
<ModalHeader className="modalHeader" toggle={this.toggle}>{this.props.ModalHeader}</ModalHeader>
<ModalBody className="modalBody">
{this.props.children}
</ModalBody>
<ModalFooter className="modalFooter">
{this.props.primeiroButton}
{this.props.segundoButton}
{this.props.terceiroButton}
</ModalFooter>
</Modal>
</Container>
);
}
}
export default MyModal;
E venho utilizando a mesma logica com mais componentes que utilizo em outras telas:
import React, { Component } from 'react';
import './CSS/Switch.css';
export default class Switch extends Component {
render() {
return (
<div>
<div onChange={this.props.onChange} className="switch teal-switch">
<label>
{this.props.firstOption}
<input defaultChecked={this.props.checked} type="checkbox"/>
<span className="lever"></span>
{this.props.secondOption}
</label>
</div>
</div>
);
}
}
Porem fazendo com o Alerta não consigo passar os atributos, estou tentando algo como:
//Alerts.js
import React, { Component } from 'react';
import { ToastContainer, toast } from 'react-toastify';
class Alerts extends Component {
constructor(){
super();
this.State = {
color:'',
mensagem:'',
}
}
notify(type) {
return () => {
switch (type) {
case 'info':
toast.info('Info message', {
autoClose: 3000
});
break;
case 'success':
toast.success('Success message', {
position: toast.POSITION.TOP_RIGHT,
});
break;
case 'warning':
toast.warn('Warning message');
break;
case 'error':
toast.error('Error message');
break;
}
};
};
render() {
return (
<div>
<ToastContainer
hideProgressBar={true}
newestOnTop={true}
autoClose={5000}
/>
</div>
);
}
}
export default Alerts;
Mas não faço ideia de como passar os valores para ele, de outra classe.