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状态的一个很好的用例。
以为例
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"}/>;
相关文章:
- 如何使用jquery迭代具有相同属性的html元素并查找onclick事件
- 如何通过它瞄准javascript元素's的onclick属性
- 将多个元素绑定到同一onclick
- 如何在动态创建元素的内联onclick事件中传递对象
- Onclick函数更改为所有更改元素的相同函数
- 为onClick-hander插入临时DOM元素
- 元素onClick无法使用ngClick
- 将列表元素 onclick 事件绑定到单选输入
- 滚动到一个元素 onClick JavaScript
- 创建 D3.js 元素 OnClick 事件的放大副本
- 单击span时获取附近的输入元素(onclick事件)
- 使用纯javascript获取li元素onclick,而不对每个元素应用onclick
- 需要通过元素onclick函数停止执行Javascript onclick函数
- 我怎么得到元素.onclick在Firefox中工作
- JavaScript服务器元素onclick事件
- 从JavaScript字符串中设置元素onclick
- Javascript的元素.onclick = functionName(作为字符串)
- 显示HTML元素onclick事件
- 选项元素onclick事件修复chrome
- 如何在不触发父元素onclick的情况下触发元素的onclick