我通常会使用Promise ..但是根据我的理解,当Redux更新状态时,它是异步完成的......所以我不认为这会起作用吗?
<?php
$field_name = $_POST['name'];
$email = $_POST['email'];
$field_message = $_POST['message'];
$mail_to = 'example@yahoo.co.uk';
$subject = 'Message from a site visitor ' . $field_name;
$body_message = 'From: '.$field_name."\n";
$body_message .= 'E-mail: '.$email."\n";
$body_message .= 'Message: '.$field_message;
$headers = "From: $email\r\n";
$headers .= "Reply-To: $email\r\n";
$mail_status = mail($mail_to, $subject, $body_message, $headers);
if ($mail_status) { ?>
<script language="javascript" type="text/javascript">
alert('Thank you for the message. We will contact you shortly.');
window.location = 'contact.php';
</script>
else { ?>
<script language="javascript" type="text/javascript">
alert('Message failed. Please, send an email to example@yahoo.co.uk');
window.location = 'contact.php';
</script>
<?php
}?>
编辑:
这就是我在想的事情...但我认为不会起作用,因为状态不是异步更新的吗?
export function setComposition( composition ) {
return { type: types.SET_COMPOSITION, composition };
}
export function doStuff() {
// What I'd like to do:
dispatch(setComposition).then(() => {
console.log('done');
});
}
答案 0 :(得分:1)
您应该再添加一项操作来检查异步操作是否已完成:
export function setComposition( composition ) {
return { type: types.SET_COMPOSITION, composition };
}
export function successComposition() {
return { type: types.SET_COMPOSITION_SUCCESS };
}
export function doStuff() {
// What I'd like to do:
dispatch(setComposition());
yourAsyncFunction.then(() => {
console.log('done');
dispatch(successComposition());
});
}
答案 1 :(得分:1)
好问题!使用Redux Thunk是为了确保异步操作(例如通过axios向数据库发出请求)确实将异步处理。
因此,除非您的setComposition操作需要异步,否则您不需要使用thunk。在它是同步的情况下,您可以这样做以查看它何时完成:
dispatch(setComposition( compositionToSet )) //remember to pass in composition instance!
console.log('all done!')
除非您正在编写生产代码并且正在对操作进行批处理,否则上述对redux的更新应该是同步的。
此外,应该注意的是,用于将本地状态更新到组件的this.setState()
可以是异步的,当您说状态更新是异步时,这可能是您正在考虑的问题。 / p>