【发布时间】:2016-09-14 01:34:22
【问题描述】:
当我尝试将值绑定到组件函数 handleInput 时出现错误: 未捕获的类型错误:无法读取未定义的属性“绑定”
但是,当我将 input 元素插入到 render 方法底部的 return 语句中时,它不会产生任何错误。我猜这与渲染方法的生命周期有关,但我不确定。
感谢任何见解。
至于代码的作用,它从 this.props.info.text 中检索一个字符串,并将 的所有实例替换为一个 html 输入框,然后附加到一个 div。在用户输入时,这些值会传播到父组件。
export default class Line extends React.Component {
constructor() {
super();
}
handleInput(id, e) {
console.log(id);
this.props.handleCode(e.target.value);
}
shouldComponentUpdate(){
if (document.getElementById('otherClass').innerHTML.length == 0){
return true;
}
return false;
}
render() {
var id = this.props.id;
let codeVal = "";
let codeDiv = document.createElement('div');
if (typeof(this.props.info) !== 'undefined') {
//breaks here
codeVal = this.props.info.text.replace(/<= var[0-9] =>/, '<input type="text" onInput=this.handleInput.bind(this,id)></input>');
let index = codeVal.indexOf('<');
let splits = [codeVal.slice(0, index), codeVal.slice(index)];
codeDiv.innerHTML = "<div class='row'><div class='col-md-6'>"+splits[0]+"</div><div class='col-md-6'>"+splits[1]+ "</div></div>";
document.getElementById('otherClass').appendChild(codeDiv);
}
return(
<div id='otherClass'></div>
);
}
}
父代码:
export default class StateVal extends React.Component {
handleCode(id, e){
console.log("value propagated on user input");
alert(e);
}
render() {
return (
<div className="col-md-6">
<div className="card-block">
< Line info={this.props.data.codeBody[0]} handleCode={this.handleCode} id={1} />
</div>
</div>
);
}
}
编辑:想法是,如果我通过诸如“int value = ”之类的道具检索文本值,我如何将其转换为响应式html输入标签,例如
int value = <input type='text' onInput=this.handleInput.bind(this, id)/>
然后在html中渲染
【问题讨论】:
-
这……有点疯狂。为什么要使用 dom api 创建元素并将它们附加到渲染的组件中?为什么不直接制作
<div />等 React 组件? -
html 应该是动态的。这就是为什么我使用正则表达式并且不能只返回一个普通的 div。这是一个示例道具文本值: int value = 我应该将其转换为 int value =
-
您可以发布父代码吗?这是一个丑陋的黑客,我认为这种方法行不通,如果您可以提供有关要求的更多信息,您可能会得到更好的答案。
-
我同意另外两个。我不确定你想要实现的动态,但我相信 React 很容易做到这一点。另外,你应该使用 JSX 在 React 组件中注入一个函数。
-
@user2998285 React 中的一切都只是 JavaScript! JavaScript 几乎是动态的。只需根据状态和道具渲染组件。无论如何都不要打扰 DOM api。
标签: javascript reactjs reactive-programming