【问题标题】:react.net onclick function failing [duplicate]react.net onclick功能失败[重复]
【发布时间】:2017-11-10 08:40:26
【问题描述】:

我无法在 MVC 5 视图中通过 reactjs 和 react.net 启动简单的 onClick 事件。我编写的数据绑定和其他功能似乎工作正常。 我不断收到一条错误消息,指出警报未定义,但它只是一个简单的 JavaScript 警报,没有任何意义。请在下面查看我的代码:

class ClickTest extends React.Component {
    ClickMe(){
        alert('the button was clicked');
    };
    render() {
        return (
            <div onClick={this.ClickMe()}>
                Click Me
          </div>
        );
    }
}

为我的组件生成的代码如下:

// @hash v3-241CABCC1541735262CAFE84D809779D00FA7D7B
// Automatically generated by ReactJS.NET. Do not edit, your changes will be overridden.
// Version: 3.2.0 (build 0e1da66) with Babel 6.7.7
// Generated at: 2017/11/10 12:00:58 PM
///////////////////////////////////////////////////////////////////////////////
var _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();

function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }

function _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return call && (typeof call === "object" || typeof call === "function") ? call : self; }

function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function, not " + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; }

var HomeComp = function (_React$Component) {
    _inherits(HomeComp, _React$Component);

    function HomeComp() {
        var _Object$getPrototypeO;

        var _temp, _this, _ret;

        _classCallCheck(this, HomeComp);

        for (var _len = arguments.length, args = Array(_len), _key = 0; _key < _len; _key++) {
            args[_key] = arguments[_key];
        }

        return _ret = (_temp = (_this = _possibleConstructorReturn(this, (_Object$getPrototypeO = Object.getPrototypeOf(HomeComp)).call.apply(_Object$getPrototypeO, [this].concat(args))), _this), _this.state = {
            pc: _this.props.pc
        }, _temp), _possibleConstructorReturn(_this, _ret);
    }

    _createClass(HomeComp, [{
        key: 'render',
        value: function render() {
            return React.createElement(
                'div',
                null,
                'Hello ',
                this.state.pc
            );
        }
    }]);

    return HomeComp;
}(React.Component);

var ClickTest = function (_React$Component2) {
    _inherits(ClickTest, _React$Component2);

    function ClickTest() {
        _classCallCheck(this, ClickTest);

        return _possibleConstructorReturn(this, Object.getPrototypeOf(ClickTest).apply(this, arguments));
    }

    _createClass(ClickTest, [{
        key: 'ClickMe',
        value: function ClickMe() {
            alert('the button was clicked');
        }
    }, {
        key: 'render',
        value: function render() {
            return React.createElement(
                'div',
                null,
                React.createElement(
                    'div',
                    { onClick: this.ClickMe },
                    ' Click Me '
                )
            );
        }
    }]);

    return ClickTest;
}(React.Component);

【问题讨论】:

    标签: reactjs asp.net-mvc-5 reactjs.net


    【解决方案1】:

    class ClickTest extends React.Component {
        ClickMe(){
            alert('the button was clicked');
        };
        render() {
            return (
                <div onClick={this.ClickMe.bind(this)}>
                    Click Me
              </div>
            );
        }
    }
    
    ReactDOM.render(
      <ClickTest />,
      document.getElementById('container')
    );
    <script src="https://cdnjs.cloudflare.com/ajax/libs/react/15.1.0/react.min.js"></script>
    <script src="https://cdnjs.cloudflare.com/ajax/libs/react/15.1.0/react-dom.min.js"></script>
    
    <div id="container">
        <!-- This element's contents will be replaced with your component. -->
    </div>

    将您的调用方法与范围“this”绑定

     <div onClick={this.ClickMe.bind(this)}>
                Click Me
          </div>
    

    【讨论】:

    • 这已经停止了错误,但是当我点击 div 时没有任何反应:(
    • 实际上它在小提琴中工作..检查一下
    • 这是带有 MVC 的 React.net @Html.React 用于 ReactDOM.render。视图已经渲染得很好。不过,在萤火虫中,我遇到了一个错误:TypeError:ReactDOM.hydrate 不是函数。不确定这是否会导致 onClick 无法注册
    • @Frijx“ReactDOM.hydrate 不是一个函数”听起来你没有加载 React,或者加载旧版本。您需要加载 React 以使其在客户端工作 - ReactJS.NET 仅处理服务器端部分,并为客户端部分呈现
    • 嗨 Daniel,感谢您的反馈,我正在加载我的 react js 脚本,尽管我可以通过 html 源代码看到它们。所有的库都在那里并且可以访问,甚至我的 css 以及我的 jquery 库和引导 js 库都在那里。会不会是他们加载的顺序?
    【解决方案2】:

    您可以使用粗箭头来自动绑定。

    class ClickTest extends React.Component {
        ClickMe = () => {
            alert('the button was clicked');
        }
        render() {
            return (
                <div onClick={this.ClickMe}>
                    Click Me
              </div>
            );
        }
    }
    

    错误也是,

    您正在传递对您的函数的引用。 You should not call it。应该是this.ClickMe 而不是this.ClickMe()

    【讨论】:

    • 谢谢,但没有显示警报。甚至没有注册点击。视图与 div 和 Click Me 文本一起显示,仅此而已。
    • 在函数调用时尝试使用箭头函数:
      this.ClickMe()}> Click Me
    • 再次感谢,但这也不起作用。甚至没有创建 ClickMe 功能。我试图从控制台调用它,但它的出现是未定义的。
    • 我猜你有其他问题。请参阅单击此处的工作版本。 jsfiddle.net/Lz3kpjoa/3.
    猜你喜欢
    • 1970-01-01
    • 2020-11-13
    • 2016-04-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-09-15
    • 2019-03-30
    • 1970-01-01
    相关资源
    最近更新 更多