ReactJS道具已更新,但字段不会重新渲染
ReactJS props are updated, but field is not re-rendered
我一直在玩React中的字段,但遇到了文本输入不更新(而属性更新)的问题。我曾尝试通过类/状态组件来实现,但没有成功。我有点希望能够制作出完全不在商店里的特定形式的组件。有人能给我指正确的方向吗?
import React from 'react';
export default (props) => {
function editProjectNameChanged(event, syntheticEvent) {
debugger;
props.editProject.name = syntheticEvent.target.value;
}
return (
<div className="col-xs-5 col-md-5">
<form>
<div className="form-group">
<label htmlFor="management-projects-name">Project name</label>
<input type="text" className="form-control" id="management-projects-name"
value={props.editProject.name}
onUserInput={editProjectNameChanged.bind(null, event)}
placeholder="Project name" />
</div>
</form>
</div>
);
}
提前谢谢。。整个形式的事情比我想象的要困难!
您不应该更改子对象中的道具。这对国家来说是一项好工作。更新props不是一个好主意,因为父组件不会被通知更改,并且状态更有用,因为当您调用setState()时,组件会被重新绘制。类似的东西(我还没有测试过)
import React from 'react';
export class YourComponent extends React.Component{
constructor(){
this.state = {
name: this.props.editProject.name
};
}
editProjectNameChanged(event, syntheticEvent) {
this.setState({
name: syntheticEvent.target.value
});
}
render(){
return <div className="col-xs-5 col-md-5">
<form>
<div className="form-group">
<label htmlFor="management-projects-name">Project name</label>
<input type="text" className="form-control" id="management-projects-name"
value={props.editProject.name}
onUserInput={editProjectNameChanged.bind(this, event)}
placeholder="Project name" />
</div>
</form>
</div>;
}
}
您不应该像在组件中那样更改props
。如果您不希望您的组件管理状态,那么它应该接受回调作为prop
,它将在用户输入时调用该回调。然后,父组件将决定是否以及如何更新该值,并将其作为道具传递回组件。
<input value={ props.value } onChange={ e => props.onChange(e.target.value) } />
自0.13版本以来,直接更改props
对象没有任何效果。您可以在这里找到解释为什么引入
相关文章:
- MeteorJS:用户集合如何公开新字段
- 使用具有用户定义字段的新请求者创建新的Zendesk票证
- 如何在新的Meteor Collection文档中设置服务器上的created_on字段
- 如何使用Typescript创建一个包含对象的字段的新对象
- 从输入字段中获取值并打开一个新链接
- 使用 WYIHTML5 添加包含 gem 的新字段nested_form
- 渲染后如何在输入字段上设置焦点
- ReactJS道具已更新,但字段不会重新渲染
- 根据另一个字段选择获取新值后更新下拉列表内容
- 在原始对象的基础上创建新对象的最简单方法,但没有几个字段
- 在商店定位器谷歌地图api中的商店面板中添加新字段
- 从按钮生成新的输入字段
- 使用可能的字段编辑器打开新表中的引导程序表行
- Javascript 新对象字段未保存
- 带有按钮和html的Javascript新输入字段
- 如何在添加新输入字段时保存现有输入字段中的值
- 如何在typescript上实现新的字段
- 使用下拉值添加的新输入字段
- 如何基于拾取列表值渲染字段
- 想要添加三个新的字段与添加更多按钮