【发布时间】:2015-08-19 01:13:08
【问题描述】:
我是 React 和 Javascript 的新手,我正在尝试渲染以下 React 组件:
'use strict';
var React = require('react');
import ToReadList from './toreadlist.js';
var ToRead = React.createClass({
getInitialState: function() {
return { bookTitles: [] };
},
handleSubmit: function(e) {
e.preventDefault();
this.state.bookTitles.push(React.findDOMNode(this.refs.bookTitleInput).value.trim());
this.setState({items: this.state.bookTitles});
},
render: function() {
return (<div>
<form onSubmit={this.handleSubmit}><input type="text" ref="bookTitleInput"></input>
<input type="submit"></input></form>
<ToReadList bookTitles={this.state.bookTitles} />
</div>
);
}
});
module.exports = ToRead;
但我的控制台出现以下错误:“Uncaught TypeError: Cannot read property 'toUpperCase' of undefined”
我尝试调试(因为错误对我来说是模糊的,并且我的代码中没有指示任何行)并注意到这个特定的行:
this.state.bookTitles.push()
导致错误。
请帮忙!
编辑 该错误是由 webpack var 注入函数引起的:
function autoGenerateWrapperClass(type) {
return ReactClass.createClass({
tagName: type.toUpperCase(),
render: function() {
return new ReactElement(
type,
null,
null,
null,
null,
this.props
);
}
});
}
【问题讨论】:
-
在你的代码中没有
.toUpperCase。 -
你的意思是无处被调用?
-
this.state.bookTitles.push(React.findDOMNode(this.refs.bookTitleInput));如果上述行有误,请尝试使用常量字符串进行推送。我认为 findDOMNode 正在返回 null 并且 push 正在对其进行某种大写,这会导致错误。
-
@Biswanath 是的,我试过这个:this.state.bookTitles.push("this is a title");一样。我添加了这个:console.log(React.findDOMNode(this.refs.bookTitleInput)) 并且输入被正确打印。值得注意的是,这段代码 (this.state.bookTitles.push("this is a title");) 在 React 0.12 下完美运行,但是当我升级到 0.13 时出现问题
-
@panther 错误出现在 "function autoGenerateWrapperClass(type) { return ReactClass.createClass({ tagName: type.toUpperCase(), " WEBPACK VAR INJECTION 的代码
标签: javascript reactjs webpack