ruby-on-rails TypeError:无法读取未定义的属性“userAgent”

jmo0nnb3  于 2023-02-17  发布在  Ruby
关注(0)|答案(2)|浏览(135)

我正在尝试将react-slick slider集成到ReactJS应用程序中。
当我把它集成到一个新的演示应用程序中时,它按预期工作,但如果我把它集成到我自己的应用程序中,它会抛出一个错误。
当我尝试在组件中导入滑块时

var Slider = require('react-slick');

它显示了一个错误。
错误日志(在rails中)是

| ExecJS::ProgramError - TypeError: Cannot read property 'userAgent' of undefined:|   execjs (2.7.0) 
lib/execjs/ruby_racer_runtime.rb:98:in `wrap_error'|   execjs (2.7.0) 
lib/execjs/ruby_racer_runtime.rb:15:in `rescue in block in initialize'|   execjs (2.7.0) 
lib/execjs/ruby_racer_runtime.rb:12:in `block in initialize' |   execjs (2.7.0) 
lib/execjs/ruby_racer_runtime.rb:75:in `block in lock'|   execjs (2.7.0) 
lib/execjs/ruby_racer_runtime.rb:73:in `lock'|   execjs (2.7.0) 
lib/execjs/ruby_racer_runtime.rb:9:in `initialize'|   execjs (2.7.0)

编辑
在我的代码中的其他一些地方,我已经写了下面的代码,它的工作很好

'use strict';

var React = require('react');
import logo from 'img/spark-logo.jpg'
var Carousel = require('nuka-carousel');
//import { NukaDecorate } from 'nuka-carousel-autoscroll';

class App1 extends React.Component{

  // mixins: [Carousel.ControllerMixin],
  render() {
    return (
      <Carousel>
        <img src={logo} alt="Smiley face" />
        <img src="http://placehold.it/1000x400/ffffff/c0392b/&text=slide2"/>
        <img src="http://placehold.it/1000x400/ffffff/c0392b/&text=slide3"/>   
      </Carousel>
    )
  }
}

module.exports = App1;
ht4b089n

ht4b089n1#

问题是您显然是在尝试呈现应用服务器端(或者至少在非浏览器上下文中需要)。
的依赖项之一是尝试访问全局navigator对象的userAgent属性,该属性仅在浏览器中定义。
为了避免这个问题,您可以尝试隔离插件,只在浏览器上要求它,并在ruby中检查window或等效项。
你也可以简单地将变量模拟为默认值,这样它就不会崩溃。

global.navigator = {
  userAgent: 'node',
}
rekjcdws

rekjcdws2#

方法很少:
1.删除node_module,重新安装所有组件;
1.确保您安装了正确版本的软件包,例如react@16应该使用rerender@16。

相关问题