我有以下反应路由器设置:
/
我想实现以下目标:
如果用户未经过身份验证并且正在访问根位置(/catalog/overview
),则会显示登录屏幕,登录后,用户将重定向到目录视图。当用户访问其他位置(例如/catalog/overview
)时,将提示用户登录,并且在成功进行身份验证后,用户将被重定向到state.get('user')
。
事情是:初始重定向工作正常。每当我尝试访问某个位置时,都会显示登录页面。所以我们可以说redirectAction正在运行。另外:authSelector工作正常,因为当我在console.log UserIsAuthenticated
时,我得到通常处于我状态的用户对象。此外:当我从第一个IndexRoute导航中删除routerActions.replace
时,导航工作正常。
当我登录时,我的Redux DevTools向我显示我的令牌已被设置,我希望我的react-router-redux import { Map } from 'immutable'
import {
USER_LOGGED_IN,
USER_LOGGED_OUT
} from './consts'
export default function authenticationReducer (
state: Map<*, *> = Map({}), action: Object
) {
switch (action.type) {
case USER_LOGGED_IN:
return state
.set('token', action.payload.get('token'))
case USER_LOGGED_OUT:
return state
.set('token', undefined)
default:
return state
}
}
能够响应。
我的userReducer.js:
const renderApp = () => {
ReactDOM.render(
<AppContainer>
<MuiThemeProvider muiTheme={muiTheme}>
<Provider store={store}>
<Router history={history} routes={routes} />
</Provider>
</MuiThemeProvider>
</AppContainer>,
document.getElementById('root')
)
}
这就是我加载路线的方式:
def is_attacked(x,y,n,chess_board)
return true if chess_board[x].include?(1)
sum=x+y
diff=x-y
p=0
while p<=n-1
return true if p!=x && chess_board[p][y]==1
q=0
while q<=n-1
(((p+q==sum)||(p-q==diff)) && chess_board[p][q]==1) ? (return true) : q+=1
end
p+=1
end
return false
end
def n_Queens(n,n_fix,chess_board)
return true if n==0
i=0
while i<=n_fix-1
j=0
while j<=n_fix-1
if is_attacked(i,j,n_fix,chess_board)
j+=1
next
else
chess_board[i][j]=1
n_Queens(n-1,n_fix,chess_board) ? (return true) : chess_board[i][j]=0
end
j+=1
end
i+=1
end
return false
end
n=gets.chomp.to_i
n_fix=n
chess_board=Array.new(n) {Array.new(n,0)}
if n_Queens(n,n_fix,chess_board)
chess_board.each do |line|
puts line.join(" ")
end
else
puts "Not possible"
end
如何在登录时重新触发这些路线?
答案 0 :(得分:1)
我遇到了同样的问题,我通过在Login
组件render
中添加重定向来修复它(与您的代码只有一个区别,我通过检查{{1}来检查用户是否已获得授权} prop,而不是user
):
user.token