我正在编写一个脚本,根据下拉的高度和屏幕上输入的位置,将输入下移或高于输入.另外,我想根据其方向将修改器设置为下拉列表.但是setState在内部使用componentDidUpdate会创建一个无限循环(很明显)
我已经找到了getDOMNode直接使用和设置classname到dropdown 的解决方案,但我觉得使用React工具应该有更好的解决方案.有谁能够帮我?
这是工作代码的一部分getDOMNode(有点忽略定位逻辑以简化代码)
let SearchDropdown = React.createClass({
componentDidUpdate(params) {
let el = this.getDOMNode();
el.classList.remove('dropDown-top');
if(needToMoveOnTop(el)) {
el.top = newTopValue;
el.right = newRightValue;
el.classList.add('dropDown-top');
}
},
render() {
let dataFeed = this.props.dataFeed;
return (
<DropDown >
{dataFeed.map((data, i) => {
return (<DropDownRow key={response.symbol} data={data}/>);
})}
</DropDown>
);
}
});
Run Code Online (Sandbox Code Playgroud)
这里是setstate的代码(创建一个无限循环)
let SearchDropdown = React.createClass({
getInitialState() {
return {
top: false
};
},
componentDidUpdate(params) {
let el = this.getDOMNode();
if (this.state.top) {
this.setState({top: …Run Code Online (Sandbox Code Playgroud) 我不确定如何正确调试这个但是尝试了一些不同的方法,这些方法已经缩短了时间,但没有解决问题.我办公室中至少有4个人可以在相同的机器上执行此代码,并且安装了相同版本的ruby和rubygems且没有错误.
这是我正在执行的代码:
status = Open4::popen4( "swfmill simple stdin stdout" ) do | pid, stdin, stdout, stderr |
stdin.write( config )
stdin.close
bytes = stdout.read
errors = stderr.read
end
Run Code Online (Sandbox Code Playgroud)
我在这条线路上遇到"总线错误":
errors = stderr.read
Run Code Online (Sandbox Code Playgroud)
如果我评论该行,我会在此行上收到"Segementation Fault":
bytes = stdout.read
Run Code Online (Sandbox Code Playgroud)
我显然使用Open4库并执行外部进程.这个外部进程在直接从终端执行时非常有效,并且当这个Ruby代码在这个特定的Rails应用程序之外运行时,即使在不同的,更简单的Rails应用程序中也是如此.
要重现错误,我只需执行我的特定测试方法,如下所示:
ruby test/unit/swf_generator_test.rb --name test_get_bytes
Run Code Online (Sandbox Code Playgroud)
我在配备Intel Core 2 Duo 2.53 GHz和8GB RAM的MacBook Pro上运行Snow Leopard Mac OS X 10.6.2(10C540).
ruby -v && gem -v
ruby 1.8.7 (2009-06-12 patchlevel 174) [i686-darwin10.2.0]
1.3.5
Run Code Online (Sandbox Code Playgroud)
我在GDB中执行了这段代码,发现我的libxml和libxslt库都安装不正确.我能够安装这两个库,现在GDB不再告诉我任何我认为有用的东西.以下是GDB的当前输出:
gdb ruby
GNU gdb 6.3.50-20050815 (Apple version gdb-1344) (Fri Jul 3 …Run Code Online (Sandbox Code Playgroud) 我理解如何让Eclipse在选项卡的位置插入空格,但是我宁愿不必通过12个空格来到达缩进的块.
如果有办法隐藏"显示空白字符"中的空格,则可以获得奖励积分.我喜欢看到制表符和回车符的空白字符,但是当显示空格时,显示也会变得混乱.
我运行的过程很简单,它会定期提取RSS feed并更新MySQL数据库中的文章。
现在,articles表已填充到约13万行。对于找到的每篇文章,处理器都会检查该文章是否已经存在。这些查询几乎总是花费300毫秒,大约每10或20次尝试,它们就会花费2秒钟以上。
SELECT id FROM `articles` WHERE (guid = 'http://example.com/feed.rss') LIMIT 1;
# Query_time: 2.754567 Lock_time: 0.000000 Rows_sent: 0 Rows_examined: 0
Run Code Online (Sandbox Code Playgroud)
我在guid列上有一个索引,但是每当遇到新文章时,它就会被添加到Articles表中-使查询缓存无效(对吗?)。
慢查询日志中的其他一些字段报告检查了120多个行。
当然,在我的开发机器上,这些查询大约需要0.2毫秒。
该服务器是Engine Yard Solo(EC2)的虚拟主机,具有1.7GB的内存以及这些天附带的任何CPU EC2。
任何建议将不胜感激。
更新资料
事实证明,问题出在椅子和键盘之间。
我在'id'上有一个索引,但在'guid'上查询。
在“ guid”上添加索引可使查询时间降低到0.2毫秒。
感谢大家提供的所有有用提示!
ruby ×2
eclipse ×1
ecmascript-6 ×1
javascript ×1
mysql ×1
performance ×1
rdoc ×1
reactjs ×1
swfmill ×1
yard ×1