【问题标题】:react-responsive-accordion -> getting "Uncaught TypeError: Cannot read property 'number' of undefined"react-responsive-accordion -> 得到“Uncaught TypeError: Cannot read property 'number' of undefined”
【发布时间】:2017-11-26 08:42:28
【问题描述】:

我是 react js 的新手,并通过使用“react-responsive-accordion”创建了一个简单的 react 应用程序来显示手风琴。按照链接'https://www.npmjs.com/package/react-responsive-accordion'这样做,但我正在低于错误

下面是代码:

package.json 类:

    {
  "name": "reactapp",
  "version": "1.0.0",
  "description": "React JS Application",
  "scripts": {
    "start": "webpack-dev-server"
  },
  "author": "",
  "license": "ISC",
  "dependencies": {
    "babel-core": "^6.10.4",
    "babel-loader": "^6.2.4",
    "babel-polyfill": "^6.9.1",
    "babel-preset-es2015": "^6.9.0",
    "babel-preset-react": "^6.11.1",
    "babel-preset-stage-0": "^6.5.0",
    "babel-register": "^6.9.0",
    "react": "^16.1.1",
    "react-collapsible": "^2.0.3",
    "react-dom": "^16.1.1",
    "react-responsive-accordion": "^1.0.0",
    "webpack": "^1.13.1",
    "webpack-dev-middleware": "^1.6.1",
    "webpack-dev-server": "^1.14.1",
    "webpack-hot-middleware": "^2.11.0"
  }
}

main.js 类:

import React from 'react';
import ReactDOM from 'react-dom';
import App from './App.jsx';

ReactDOM.render(<App />, document.getElementById('app'));

App.jsx 类:

import React from 'react';
import Accordion from 'react-responsive-accordion';

class App extends React.Component {
      render() {
      return (
        <div>
            <Accordion>
               <div data-trigger="A nifty React accordion component">
        <p>So this is an Accordion component that used the <a href="https://github.com/glennflanagan/react-collapsible">react-collapsible</a> component. How handy.</p>
      </div>

      <div data-trigger="What the difference?" data-trigger-when-open="THAT is the difference!">
        <p>An Accordion is different to a Collapsible in the sense that only one "tray" will be open at any one time.</p>
      </div>

      <div data-trigger="I'm responsive and I have a little secret. Look inside.">
        <p>And this Accordion component is also completely repsonsive. Hurrah for mobile users!</p>
      </div>
            </Accordion>
        </div>
      );
   }
}

export default App;

webpack.config.js:

var config = {
    entry: './main.js',
    output: {
        path: '/',
        filename: 'index.js'
    },

    devServer: {
        inline: true,
        port: 8089
    },

    module: {
        loaders: [
            {
                test: /\.(js|jsx)$/,
                loader: 'babel-loader',
                exclude: /node_modules/,
                query: {
                    presets: ['es2015','react']
                }
            },
            {
                test: /\.scss/,
                loader: 'style-loader!css-loader!sass-loader'
            },
            {
                test: /\.css$/,
                loader: "style-loader!css-loader"
              }
        ]
    }
}

module.exports = config;

如有任何帮助解决此问题,我们将不胜感激。

【问题讨论】:

    标签: reactjs accordion


    【解决方案1】:

    在另一个包上遇到了同样的问题,并决定现在降级 React。这个问题似乎是由 React 的变化引起的。如果您更深入地查看代码,它实际上会抱怨:

    propTypes: {
      transitionTime: _react2.default.PropTypes.number,
    

    发生这种情况是因为处理 PropTypes 的方式发生了变化。显然,处理它们的旧方法已在版本 16 中删除。您可以在此处阅读更多信息:https://reactjs.org/docs/typechecking-with-proptypes.html

    以及我能想到的可能解决方案:

    • 使用旧版本的 react(如 Nandu Kalidindi 给出的示例中的 15.6.1)。

    • 修复模块

    【讨论】:

      【解决方案2】:

      根据 https://github.com/glennflanagan/react-responsive-accordion/blob/master/src/Accordion.js#L15,Accordion 需要 this.props.childrendata-trigger 的子数组。

      将您的渲染方法修改为类似的内容,以提供有效的子道具。或者查看这个工作示例WORKING DEMO

      render() {
        return (
          <div>
            <Accordion>
              <div data-trigger="A nifty React accordion component">
                <p>So this is an Accordion component that used the <a href="https://github.com/glennflanagan/react-collapsible">react-collapsible</a> component. How handy.</p>
              </div>
      
              <div data-trigger="What is the difference?" data-trigger-when-open={<div><span style={{color: "yellow"}}>THAT</span> is the difference!</div>}>
                <p>An Accordion is different to a Collapsible in the sense that only one "tray" will be open at any one time.</p>
              </div>       
            </Accordion>    
          </div>
        );
      }
      

      【讨论】:

      • 这并不能解决问题.. 如果我从 App.jsx 中删除导入语句 'import Accordion from 'react-responsive-accordion',则应用程序正在显示简单文本。当我包含上述导入以包含手风琴时,它会因错误而中断。
      • 那么,只是在渲染中添加没有&lt;Accodion&gt; 的导入语句会引发同样的错误吗?
      • 是的,在渲染中没有 ,只添加导入就会抛出这个错误
      • 你可以尝试安装另一个包看看。因为我认为这与您的 webpack 设置有关。我在工作演示中使用了相同版本的包,它按预期工作。
      【解决方案3】:

      包仅适用于每个 github repo 的 react 15。在 16 中更改了对 proptypes 的处理

      【讨论】:

        【解决方案4】:

        即使我遇到了同样的问题,但它得到了解决。仅在 package.json 中进行了更改。以下是所做的更改。尝试为以下所有这些给出确切的值:

        "prop-types": "^15.6.2"
        "react": "^15.4.0"
        "react-dom": "^15.4.0"
        

        之前这些是 16.x.x。我只是更改为低于 15.5.x 的版本,我在某处读到的版本是稳定的。

        在此之后转到我的终端或 windows 中的 cmd 并转到创建 react-app 的文件夹,即 node_modules、src 所在的文件夹,然后按

        npm install --save
        
        npm start
        

        这可能对某些人有帮助。

        【讨论】:

          【解决方案5】:

          我的情况是这样的,通过使用 React.PropType,我得到错误 'Uncaught TypeError: Cannot read property 'number' of undefined'

          Header.propTypes = {
              userid: React.PropType.number
          };
          

          然后我改为使用“prop-types”中的 PropTypes:

          import PropTypes from 'prop-types';
          
          ...
          
          Header.propTypes = {
              userid: PropTypes.number
          };
          

          更多详情请参考https://reactjs.org/docs/typechecking-with-proptypes.html,我正在使用:

          "react": "^16.6.1",
          "react-dom": "^16.6.1",
          

          【讨论】:

            【解决方案6】:

            安装 react-collapsible-react16 用于 React 版本 16 及更高版本。这对我有用。

            【讨论】:

              猜你喜欢
              • 2017-04-24
              • 1970-01-01
              • 1970-01-01
              • 2013-01-15
              • 2017-08-19
              • 2019-02-12
              • 2020-05-10
              • 2021-09-20
              • 2021-06-08
              相关资源
              最近更新 更多