如何在react.js中选择某些栏?
这是我的代码:
var Progressbar = React.createClass({
getInitialState: function () {
return { completed: this.props.completed };
},
addPrecent: function (value) {
this.props.completed += value;
this.setState({ completed: this.props.completed });
},
render: function () {
var completed = this.props.completed;
if (completed < 0) { completed = 0 };
return (...);
}
我想使用这个React组件:
var App = React.createClass({
getInitialState: function () {
return { baction: 'Progress1' };
},
handleChange: function (e) {
var value = e.target.value;
console.log(value);
this.setState({ baction: value });
},
handleClick10: function (e) {
console.log('You clicked: ', this.state.baction);
document.getElementById(this.state.baction).addPrecent(10);
},
render: function () {
return (
<div class="center">Progress Bars Demo
<Progressbar completed={25} id="Progress1" />
<h2 class="center"></h2>
<Progressbar completed={50} id="Progress2" />
<h2 class="center"></h2>
<Progressbar completed={75} id="Progress3" />
<h2 class="center"></h2>
<span>
<select name='selectbar' id='selectbar' value={this.state.baction} onChange={this.handleChange}>
<option value="Progress1">#Progress1</option>
<option value="Progress2">#Progress2</option>
<option value="Progress3">#Progress3</option>
</select>
<input type="button" onClick={this.handleClick10} value="+10" />
<button>+25</button>
<button>-10</button>
<button>-25</button>
</span>
</div>
)
}
});
我想执行handleClick10函数并为我选择的进度栏执行操作。但是我得到的结果是:
You clicked: Progress1
TypeError: document.getElementById(...) is null
如何在react.js中选择特定元素?
您可以通过指定 ref
编辑:
在 React 16.3+中 ,用于React.createRef()
创建引用:
class MyComponent extends React.Component {
constructor(props) {
super(props);
this.myRef = React.createRef();
}
render() {
return <div ref={this.myRef} />;
}
}
为了访问元素,请使用:
const node = this.myRef.current;
使用React.createRef()的DOC
编辑
但是,facebook建议不要这样做,因为html" target="_blank">字符串引用存在一些问题,被认为是旧问题,并且很可能在将来的发行版中被删除。
从文档:
旧版API:字符串引用
如果您以前使用过React,那么您可能会熟悉一个较旧的API,其中ref属性是一个字符串,例如“
textInput”,并且可以通过this.refs.textInput访问DOM节点。我们建议不要这样做,因为字符串引用存在一些问题,被认为是旧问题,并且很可能在将来的发行版中删除。如果您当前正在使用this.refs.textInput访问引用,则建议改用回调模式。
对于 React 16.2和更早版本, 推荐的方法是使用回调模式:
<Progressbar completed={25} id="Progress1" ref={(input) => {this.Progress[0] = input }}/>
<h2 class="center"></h2>
<Progressbar completed={50} id="Progress2" ref={(input) => {this.Progress[1] = input }}/>
<h2 class="center"></h2>
<Progressbar completed={75} id="Progress3" ref={(input) => {this.Progress[2] = input }}/>
DOC使用回调
甚至旧版本的react定义的引用都使用如下字符串
<Progressbar completed={25} id="Progress1" ref="Progress1"/>
<h2 class="center"></h2>
<Progressbar completed={50} id="Progress2" ref="Progress2"/>
<h2 class="center"></h2>
<Progressbar completed={75} id="Progress3" ref="Progress3"/>
为了得到元素就做
var object = this.refs.Progress1;
记住要this
在箭头功能块内使用,例如:
print = () => {
var object = this.refs.Progress1;
}
等等…
我正在编写一个jQuery插件,它需要能够在iframe中针对DOM元素运行。我现在只是在本地测试这个(即url是file://.../example.html),在Chrome中,我一直按“安全错误:未能从”htmliframeElement“中读取”内容文档“属性:阻止一个来源为”null“的框架访问跨来源的框架。”在Safari中,我只得到一个空文档。 如果父文件和iframe文件都从我的本
问题内容: 我试图在我的Angular项目中将keyup事件附加到指令。这是指令: 这是模板中的html: 我想在链接函数中访问并将keyup事件附加到它。我知道我可以用jQuery来获得它,但是那不是Angular的方法。从dom中获取该元素的正确方法是什么? 问题答案: 您可以使用Angular’ ‘ 方法轻松完成此操作: 实时示例:http://jsfiddle.net/cherniv/S7
有没有可能用蟒蛇硒在阴影DOM中找到元素? 示例用例: 我用输入了这个
问题内容: 我有时看到人们在导出组件时将它们包装起来: 这是做什么用的,什么时候应该使用? 问题答案: 当您在应用程序中包含主页组件时,通常将其包装在这样的组件中: 这样,该组件便可以访问,因此可以使用重定向用户。 某些组件(通常是标头组件)出现在每个页面上,因此没有包装在中: 这意味着标题不能重定向用户。 要解决此问题,可以在导出时将标头组件包装在一个函数中: 这使组件可以访问,这意味着标题现在
我正在查看React Native网站,然后我意识到你可以用React Native以及Android/iOS应用构建web应用。我想知道react dom和react Native之间的主要区别是什么,如果这两个库都可以构建web应用程序并操作dom。react-dom有哪些主要特性,react-Native没有?
问题内容: 我希望能够弄清楚哪些React组件与某个DOM元素相关联。 例如,假设我有一个div,并且正在使用React渲染整个应用程序。div必须由React组件呈现-但是哪一个呢? 我知道React提供了方法“ getDOMNode ”来获取与React组件相关联的DOM节点,但是我想做相反的事情。 这可能吗? 问题答案: 没有。 React中的中心概念是您实际上在DOM中没有控件。相反,您的