Uncaught TypeError: Cannot read property 'toUpperCase' of undefined react state item
Uncaught TypeError: Cannot read property 'toUpperCase' of undefined react state item
我是 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 属性 '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
);
}
});
}
findDOMNode()
使用 toUpperCase()
函数,该函数实际上是在空值上调用的。
例子
var x = null
x.toUpperCase()// results in this error.
如果您可以 post findDOMNode()
代码,我们可以找出错误。
或
确保 toUpperCase()
在 non-null object
上被调用。
我为这个 post 的低质量表示歉意。
我解决了这个问题。
最后,问题来自包含的组件:
<ToReadList bookTitles={this.state.bookTitles} />
调用this.state.bookTitles.push(React.findDOMNode(this.refs.bookTitleInput).value.trim());
时出现错误是因为bookTitles
在组件不为空时触发了组件内部的错误(即<ToReadList bookTitles={["mastery", "foundation"]} />
触发了完全相同的错误)
有问题的代码是这样的:
'use strict';
var React = require('react');
import {ToReadListItem} from './todoreadlistitem.js';
var ToReadList = React.createClass({
render: function() {
return (<ul>
{this.props.bookTitles.map(function(bookTitle){
return (<li>
<ToReadListItem bookTitle={bookTitle} isChecked={false}/>
</li>);
})}
</ul>);
}
});
module.exports = ToReadList;
更改此行:
import {ToReadListItem} from './todoreadlistitem.js';
为此:
import ToReadListItem from './todoreadlistitem.js';
我知道,将 es6 语法与平面语法混合并不是一个好主意,但我允许自己这样做,因为该应用程序用于实验目的。
我希望我能帮助你把事情弄清楚。
我猜问题是因为你试图直接修改状态。试试这个:
var newBookTitles = this.state.bookTitles;
var value = React.findDOMNode(this.refs.bookTitleInput).value.trim();
newBookTitles.push(value);
this.setState({bookTitles: newBookTitles});
希望能解决你的问题
导入名称不正确的组件给了我同样的错误。
我将其导入为
var AreaChart = Charts.AreaChart;
在 Charts.js
中,它是用一个小 'c' 导出的:
Areachart: Areachart
导出时在 Charts.js
中将其更改为 AreaChart: Areachart
解决了问题。
我是 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 属性 '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
);
}
});
}
findDOMNode()
使用 toUpperCase()
函数,该函数实际上是在空值上调用的。
例子
var x = null
x.toUpperCase()// results in this error.
如果您可以 post findDOMNode()
代码,我们可以找出错误。
或
确保 toUpperCase()
在 non-null object
上被调用。
我为这个 post 的低质量表示歉意。
我解决了这个问题。
最后,问题来自包含的组件:
<ToReadList bookTitles={this.state.bookTitles} />
调用this.state.bookTitles.push(React.findDOMNode(this.refs.bookTitleInput).value.trim());
时出现错误是因为bookTitles
在组件不为空时触发了组件内部的错误(即<ToReadList bookTitles={["mastery", "foundation"]} />
触发了完全相同的错误)
有问题的代码是这样的:
'use strict';
var React = require('react');
import {ToReadListItem} from './todoreadlistitem.js';
var ToReadList = React.createClass({
render: function() {
return (<ul>
{this.props.bookTitles.map(function(bookTitle){
return (<li>
<ToReadListItem bookTitle={bookTitle} isChecked={false}/>
</li>);
})}
</ul>);
}
});
module.exports = ToReadList;
更改此行:
import {ToReadListItem} from './todoreadlistitem.js';
为此:
import ToReadListItem from './todoreadlistitem.js';
我知道,将 es6 语法与平面语法混合并不是一个好主意,但我允许自己这样做,因为该应用程序用于实验目的。
我希望我能帮助你把事情弄清楚。
我猜问题是因为你试图直接修改状态。试试这个:
var newBookTitles = this.state.bookTitles;
var value = React.findDOMNode(this.refs.bookTitleInput).value.trim();
newBookTitles.push(value);
this.setState({bookTitles: newBookTitles});
希望能解决你的问题
导入名称不正确的组件给了我同样的错误。
我将其导入为
var AreaChart = Charts.AreaChart;
在 Charts.js
中,它是用一个小 'c' 导出的:
Areachart: Areachart
导出时在 Charts.js
中将其更改为 AreaChart: Areachart
解决了问题。