提交表單時,如果服務器發送迴應錯誤,我希望顯示2.5秒的小彈出窗口。Semantic-ui-react:如何在不點擊/懸停的情況下觸發Popup?
這個邏輯非常簡單,但是,我不知道如何讓這個彈出窗口監聽狀態管理中的布爾值(在我的情況下爲MobX)。我可以將內容放入Popup中,但是,觸發器是一個按鈕(如果單擊該按鈕,內容將顯示) - 但是,如何讓它在某處聆聽布爾值?
相當簡單類這裏:
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'
/>
)
}
}
}
然而,觸發值是如果this.props.data
存在,其被呈現的按鈕。但那不是我想要的行爲;如果this.props.data
在那裏,我只想讓彈出窗口呈現(從而觸發);或者,如果需要,我可以爲道具提供一個true
價值。
但是,如何讓這個組件觸發器不是懸停/按鈕?
似乎「open」prop實際上是對「Portal」組件(它被「Popup」使用)的傳遞。這也是有道理的,爲什麼只能以這種方式關閉它。當你傳遞'open = true'時,你實際上將它傳遞給'Portal',但是'Popup'組件是靜態定位的,因此*不知道它需要在*中的座標。這就是爲什麼它只能通過事件打開 - 他們使用Event對象來獲取光標的位置。見https://github.com/Semantic-Org/Semantic-UI-React/issues/1065 – losnir