Reactjs 使用React Redux显示Snackbar
首先,我是一个全新的反应和重复 每当我发送事件时,我都无法将Reactjs 使用React Redux显示Snackbar,reactjs,redux,react-redux,material-ui,Reactjs,Redux,React Redux,Material Ui,首先,我是一个全新的反应和重复 每当我发送事件时,我都无法将材质ui中的Snackbar显示为通知面板 有关我的示例,请参见模型代码。通知不会以这种方式显示,因为当API调用成功时,App组件中的this.props.sending会立即设置为false 现在,如果我跳过已完成的任务调度,一切似乎都正常。由于我的onRequestClose功能,Notification组件的state.open设置为false,但是由于my应用程序中的this.props.sending组件仍然设置为true,
材质ui
中的Snackbar
显示为通知面板
有关我的示例,请参见模型代码。通知不会以这种方式显示,因为当API调用成功时,App
组件中的this.props.sending
会立即设置为false
现在,如果我跳过已完成的任务
调度,一切似乎都正常。由于我的onRequestClose
功能,Notification
组件的state.open
设置为false
,但是由于my应用程序中的this.props.sending
组件仍然设置为true
,因此每当应用程序重新呈现时,它都会显示通知
你知道我该如何正确实施吗?
我有一个动作
,看起来像这样
const doSomething = (data) => {
return dispatch => {
dispatch({
type: 'SOMETHING_PENDING',
payload: { data }
})
apiCall.then((complete) => {
dispatch({
type: 'SOMETHING_FULFILLED',
payload: { data }
})
})
}
}
const initialState = {
sending: false
}
const SomeReducer = (state=initialState, action) => {
switch (action.type) {
case 'SOMETHING_PENDING': {
return {
...state,
sending: action.payload
}
}
case 'SOMETHING_FULFILLED': {
return {
...state,
sending: false
}
}
default: {
return state
}
}
}
export default SomeReducer
我的减速机
看起来像这样
const doSomething = (data) => {
return dispatch => {
dispatch({
type: 'SOMETHING_PENDING',
payload: { data }
})
apiCall.then((complete) => {
dispatch({
type: 'SOMETHING_FULFILLED',
payload: { data }
})
})
}
}
const initialState = {
sending: false
}
const SomeReducer = (state=initialState, action) => {
switch (action.type) {
case 'SOMETHING_PENDING': {
return {
...state,
sending: action.payload
}
}
case 'SOMETHING_FULFILLED': {
return {
...state,
sending: false
}
}
default: {
return state
}
}
}
export default SomeReducer
我的应用程序
组件已连接到商店
import React, { Component } from 'react'
import { connect } from 'react-redux'
const storeData = (store) => {
const data = {
sending: store.Reducer.sending
}
return data
}
class App extends Component {
render() {
return (
<Notification sending={this.props.sending} />
)
}
}
export default connect(storeData)(App)
如果我没看错的话,听起来你的Snackbar工作正常,但是关闭得太快了。您希望它显示出来,但在4秒后自动关闭,即使API调用本身只花了.5秒。对吗?如果是这样,我相信您可以在状态.open
从true更改为false时跳过重新渲染组件(但在从false更改为true时仍允许渲染):
这就成功了。简单整洁。谢谢你,杰夫!太棒了,很高兴能帮忙!但是当我需要按请求显示snakbar成功或失败时,我会做什么!!