Reactjs 反应:模板样式属性不是由setState更新的

Reactjs 反应:模板样式属性不是由setState更新的,reactjs,Reactjs,考虑我的代码示例(忘记密码表单) import React,{PropTypes,Component}来自'React'; 从“jquery”导入美元; 从“../ManageCountry”导入ManageCountry; 导入“/style.css”; 从“../const.js”导入{CONFIG}; 导出默认类Forgotpwd扩展组件{ 状态={ 密码文本:“”, passwordTextConfirm:“”, 已过期的重置请求:“无” } trad={}; 构造函数(){ 超级();

考虑我的代码示例(忘记密码表单)

import React,{PropTypes,Component}来自'React';
从“jquery”导入美元;
从“../ManageCountry”导入ManageCountry;
导入“/style.css”;
从“../const.js”导入{CONFIG};
导出默认类Forgotpwd扩展组件{
状态={
密码文本:“”,
passwordTextConfirm:“”,
已过期的重置请求:“无”
}
trad={};
构造函数(){
超级();
ManageCountry.applyTradToState(“单点登录”,this.trad,()=>{
var trad=this.trad.message.reset_password_form[0];
此.template=(
{trad.form_title}
{trad.form_desc}

{trad.password_label} this.setState({passwordText:password.target.value})type=“email”id=“emailfpwd”className=“form control”占位符={trad.password\u label}/> {交易密码\确认\标签} this.setState({passwordtextcomfirm:password.target.value})type=“email”id=“emailfpwd”className=“form control”占位符={trad.password\u label}/>

{trad.expirated_reset_request}

{trad.submit_label} ); }); } 重置pwd(){ var validate=this.validatePassword(); var token=window.location.href.split('=').pop(); console.log(令牌); if(!token.match(新的RegExp(/^[a-f\d.]+$/)){ 警报(此.trad.message.reset\u密码\u表单[0]。重置请求错误); 返回false; } if(validate.success){ $.post(CONFIG.APIURL+“user/forgotpwd/”+令牌,{password:this.state.passwordText},(r)=>{ 如果(r.成功){ window.location=“/”+ManageCountry.getUrlRoute()+“/login”; }否则{ //$(“#过期的#u重置#u请求”).css('display','block'); this.setState({expireated_reset_request:“block”}); console.log(此.state.expired\u reset\u请求); //“block”,但在HTML中,样式始终为“none” } }“JSON”); } } 验证密码(){ if(this.state.passwordText!=this.state.passwordTextConfirm)返回{success:false,msg:“Les mots de passe ne responder pas”}; if(this.state.passwordText.length<8)返回{success:false,msg:“lemotdepassedoittefaire8caractèresauminimum”}; 返回{success:true}; } 渲染=()=>{ 返回此.template; } }
我想用一个表单错误更新一个state属性,这里是expireted\u reset\u request属性

如您所见,onClick执行resetPwd函数,在$.post回调中,我正在更新状态以将显示从none(initial)更改为block

紧接着的console.log告诉我状态是最新的,但HTML中的style属性从未更改(始终为none)

我忘了什么吗


提前感谢

据我所见,
this.template
变量只填充一次

因此,它永远不会改变是有道理的

要使其每次重新评估,请将其更改为函数:

this.template = () => (
  <div ...
)
this.template=()=>(

setState()
不会立即改变此.state。因此在
setState()
之后调用state将返回现有的状态值。您可以使用回调函数
this.setState({expireated_reset_request:“block”},函数(){
控制台.log(this.state.expireated_reset_request);
];
正确,非常感谢
this.template = () => (
  <div ...
)