jan*_*s86 17 javascript reactjs
我刚开始学习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>
);
}
});
Run Code Online (Sandbox Code Playgroud)
如何从editSlogan函数中覆盖渲染?
Sil*_*rom 40
如果我正确理解您的问题,您希望在"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>);
}
}
})
Run Code Online (Sandbox Code Playgroud)
这将改变组件状态,并使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"}/>;Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
52722 次 |
| 最近记录: |