ReactJS:onClick 改变元素
ReactJS: onClick change element
我刚开始学习 React,有一个问题。
我想执行以下操作:
如果用户单击一个段落,我想将该元素更改为一个输入字段,该字段已预填充该段落的内容。
(如果用户有一定的权限,最终目标是直接编辑)
我已经走到这一步了,但我完全不知所措。
var AppHeader = React.createClass({
editSlogan : function(){
return (
<input type="text" value={this.props.slogan} onChange={this.saveEdit}/>
)
},
saveEdit : function(){
// ajax to server
},
render: function(){
return (
<header>
<div className="container-fluid">
<div className="row">
<div className="col-md-12">
<h1>{this.props.name}</h1>
<p onClick={this.editSlogan}>{this.props.slogan}</p>
</div>
</div>
</div>
</header>
);
}
});
如何覆盖 editSlogan
函数的渲染?
如果我对你的问题的理解正确,你想在 "onClick" 事件的情况下呈现不同的元素。
这是反应状态的一个很好的用例。
举下面的例子
React.createClass({
getInitialState : function() {
return { showMe : false };
},
onClick : function() {
this.setState({ showMe : true} );
},
render : function() {
if(this.state.showMe) {
return (<div> one div </div>);
} else {
return (<a onClick={this.onClick}> press me </a>);
}
}
})
这将更改组件状态,并使 React 呈现 div 而不是 a-tag。当一个组件状态改变时(使用 setState 方法),React 计算它是否需要重新渲染自己,在这种情况下,它需要重新渲染组件的哪些部分。
更多关于州的信息
https://facebook.github.io/react/docs/interactivity-and-dynamic-uis.html
你可以解决的更清楚一点:
class EditableLabel extends React.Component {
constructor(props) {
super(props);
this.state = {
text: props.value,
editing: false
};
this.initEditor();
this.edit = this.edit.bind(this);
this.save = this.save.bind(this);
}
initEditor() {
this.editor = <input type="text" defaultValue={this.state.text} onKeyPress={(event) => {
const key = event.which || event.keyCode;
if (key === 13) { //enter key
this.save(event.target.value)
}
}} autoFocus={true}/>;
}
edit() {
this.setState({
text: this.state.text,
editing: true
})
};
save(value) {
this.setState({
text: value,
editing: false
})
};
componentDidUpdate() {
this.initEditor();
}
render() {
return this.state.editing ?
this.editor
: <p onClick={this.edit}>{this.state.text}</p>
}
}
//and use it like <EditableLabel value={"any external value"}/>;
我刚开始学习 React,有一个问题。
我想执行以下操作:
如果用户单击一个段落,我想将该元素更改为一个输入字段,该字段已预填充该段落的内容。 (如果用户有一定的权限,最终目标是直接编辑)
我已经走到这一步了,但我完全不知所措。
var AppHeader = React.createClass({
editSlogan : function(){
return (
<input type="text" value={this.props.slogan} onChange={this.saveEdit}/>
)
},
saveEdit : function(){
// ajax to server
},
render: function(){
return (
<header>
<div className="container-fluid">
<div className="row">
<div className="col-md-12">
<h1>{this.props.name}</h1>
<p onClick={this.editSlogan}>{this.props.slogan}</p>
</div>
</div>
</div>
</header>
);
}
});
如何覆盖 editSlogan
函数的渲染?
如果我对你的问题的理解正确,你想在 "onClick" 事件的情况下呈现不同的元素。
这是反应状态的一个很好的用例。
举下面的例子
React.createClass({
getInitialState : function() {
return { showMe : false };
},
onClick : function() {
this.setState({ showMe : true} );
},
render : function() {
if(this.state.showMe) {
return (<div> one div </div>);
} else {
return (<a onClick={this.onClick}> press me </a>);
}
}
})
这将更改组件状态,并使 React 呈现 div 而不是 a-tag。当一个组件状态改变时(使用 setState 方法),React 计算它是否需要重新渲染自己,在这种情况下,它需要重新渲染组件的哪些部分。
更多关于州的信息 https://facebook.github.io/react/docs/interactivity-and-dynamic-uis.html
你可以解决的更清楚一点:
class EditableLabel extends React.Component {
constructor(props) {
super(props);
this.state = {
text: props.value,
editing: false
};
this.initEditor();
this.edit = this.edit.bind(this);
this.save = this.save.bind(this);
}
initEditor() {
this.editor = <input type="text" defaultValue={this.state.text} onKeyPress={(event) => {
const key = event.which || event.keyCode;
if (key === 13) { //enter key
this.save(event.target.value)
}
}} autoFocus={true}/>;
}
edit() {
this.setState({
text: this.state.text,
editing: true
})
};
save(value) {
this.setState({
text: value,
editing: false
})
};
componentDidUpdate() {
this.initEditor();
}
render() {
return this.state.editing ?
this.editor
: <p onClick={this.edit}>{this.state.text}</p>
}
}
//and use it like <EditableLabel value={"any external value"}/>;