Lors de la soumission d'un formulaire, je souhaite afficher une petite fenêtre pendant 2,5 secondes si le serveur renvoie une mauvaise réponse.Semantic-ui-react: Comment déclencher un Popup sans qu'il soit cliqué/planant?
La logique est assez simple, cependant, je ne peux pas comprendre comment faire de cette popup écouter un booléen quelque part dans la gestion d'état (MobX dans mon cas). Je peux obtenir le contenu dans le Popup très bien, cependant, le déclencheur est un bouton (et le contenu montrera, si vous cliquez dessus) - Mais comment puis-je le faire écouter une valeur booléenne quelque part?
classe assez simple ici:
import React from "react";
import { Popup, Button } from "semantic-ui-react";
import { inject } from "mobx-react";
const timeoutLength = 2500;
@inject("store")
export default class ErrorPopup extends React.Component {
state = {
isOpen: false
};
handleOpen =() => {
this.setState({
isOpen: true
});
this.timeout = setTimeout(() => {
this.setState({
isOpen: false
})
}, timeoutLength)
};
handleClose =() => {
this.setState({
isOpen: false
});
clearTimeout(this.timeout)
};
render() {
const errorContent = this.props.data;
if(errorContent){
return(
<Popup
trigger={<Button content='Open controlled popup' />}
content={errorContent}
on='click'
open={this.state.isOpen}
onClose={this.handleClose}
onOpen={this.handleOpen}
position='top center'
/>
)
}
}
}
Cependant, la valeur de déclenchement est un bouton qui est rendu si this.props.data
est présent. Mais ce n'est pas le comportement que je souhaite; Je veux simplement que le popup rende (et donc déclenche) si this.props.data
est là; alternativement, je peux fournir une valeur true
avec des accessoires si nécessaire. Mais comment faire pour que ce composant se déclenche sans que ce soit un bouton ou un bouton de survol?
Il semble que le prop 'open' est en fait un passage vers le composant' Portal' (il est utilisé par 'Popup'). Cela a aussi du sens pourquoi il est seulement possible de le fermer de cette façon. Quand vous passez 'open = true' vous passez en fait' Portal', mais le composant 'Popup' est positionné statiquement et donc * ne connait pas les coordonnées qu'il doit avoir dans *. C'est pourquoi il ne peut être ouvert qu'à travers un événement - ils utilisent l'objet 'Event' pour obtenir la position du curseur. Voir https://github.com/Semantic-Org/Semantic-UI-React/issues/1065 – losnir