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 ...
)