改變狀態在網頁A,我有導致B頁一個反應路由器<Link>
。在頁B,我有一個按鈕,試圖在服務器上執行某些操作,並且導致頁(成功)或停留在頁B(失敗)。在最後一種情況下,頁面上會顯示一條消息以顯示錯誤。反應,終極版/反應路由器:如何在鏈接
時我已經在B頁錯誤信息,如果我使用瀏覽器的後退按鈕返回上網頁A然後再次單擊<Link>
去B頁,該消息仍然在這裏。
所以看起來狀態在使用<Link>
時沒有重置,我想知道改變<Link>
狀態的好方法是什麼?
編輯: 使其更清晰,在網頁A你有一個<Link>
到網頁B。在頁面B你有一個按鈕來提交你的登錄信息(登錄名和密碼)。
當你點擊,一個動作做的請求到服務器:
function authRequest() {
return {
type: actionTypes.AUTH_REQUEST
};
}
function authReceive(authToken) {
return {
type: actionTypes.AUTH_RECEIVE,
authToken
};
}
function authError(errors) {
return {
type: actionTypes.AUTH_ERROR,
errors
};
}
export function fetchLogin(email, password) {
return function (dispatch) {
dispatch(authRequest());
const urlApi = `//${AUTH_BACKEND_HOST}:${AUTH_BACKEND_PORT}/${AUTH_BACKEND_URL.login}`
fetch(urlApi, {
method: 'POST',
headers: {
'Accept': 'application/json',
'content-type': 'application/json'
},
body: JSON.stringify({
email,
password
})
})
.then((response) => {
if(response.ok) {
response.json().then(function(json) {
dispatch(authReceive(json.key));
dispatch(push('/'));
});
} else {
response.json().then(function(json) {
dispatch(authError(JSON.stringify(json)));
});
}
})
.catch(function(ex) {
console.log(ex);
});
};
}
...如果它失敗,減速的狀態添加錯誤消息:
const initialState = {
authToken: '',
isFetching: false,
errors: ''
}
export default function (state=initialState, action) {
switch (action.type) {
case actionType.AUTH_REQUEST:
return {
...state,
isFetching: true,
errors: ''
};
case actionType.AUTH_RECEIVE:
return authLogin(state, action);
case actionType.AUTH_ERROR:
return {
...state,
errors: (JSON.parse(action.errors))
};
}
return state;
}
function authLogin(state, action) {
const { authToken } = action;
return {
...state,
isFetching: false,
errors: '',
authToken
};
}
...最後,發言人有一個渲染方法,其中<p>
顯示錯誤,如果它處於該狀態:
render() {
return (
<form onSubmit={this.handleSubmit}>
<label>Email <input ref="email" /></label>
<label>Password <input ref="password" type="password" /></label><br />
<p className="error">{this.props.errors.non_field_errors}</p>
<button type="submit">Login</button>
</form>
)
}
因此,正如我說的,如果它顯示的錯誤,然後我回去就網頁A然後網頁B再次通過點擊鏈接,該消息仍然存在。
謝謝。
如果狀態未被重置,則表示沒有調用ComponentB的'componentWillMount'。包括你的路由配置,它會給出更好的想法 – Deadfish
你是對的,在我正在工作的這個應用程序中沒有* componentSomething *這樣的函數。我在一些例子中看到了他們,但沒有一個用在這個應用程序中,我仍然可以設法註冊用戶,然後在主頁面上進行連接和導航。 – Destal