我有一个非常简单的React情况,我在渲染函数中有一个错误,当状态更新为包含错误值时,没有任何内容被记录。
错误是在状态更新后包含不是数组的'stuff'值,这意味着对'stuff'值调用join(“,”)会失败,但没有任何反应。 React仅保留先前在getInitialState函数中设置的数据。
我是否在这里做错了以消除错误消息,或者这就是React的工作方式?
var someComp = React.createClass({
getInitialState: function () {
return {persons: [
{name: "Jane", stuff: ["a", "b"]},
{name: "Jim", stuff: ["c", "d"]}
]}
},
componentDidMount: function () {
superagent.get('/api/tags')
.end(function (res) {
// The res.body contains a stuff-value that is not an array.
this.setState({persons: res.body});
}.bind(this));
},
render: function () {
return R.table({}, [
R.thead({},
R.tr({}, [
R.th({}, "Name"),
R.th({}, "List of stuff")
])),
R.tbody({},
this.state.persons.map(function (person) {
return R.tr({}, [
R.td({}, person.name),
// If person.stuff is not an array, then no error is logged..!
R.td({}, person.stuff.join(", "))]);
}))
])
}
});
答案 0 :(得分:1)
根据我使用React的经验,如果您逐步构建内容,它会记录更有用的错误消息。在return语句之前执行R.td({}, person.stuff.join(", "))]
,然后再使用该结果。如果person.stuff
不是数组,那么您会收到更好的错误消息。
更重要的是,为什么你想让React抛出错误?如果它是用于开发目的,则比等待来自React的错误消息更容易检查。否则,在尝试将其作为一个之前,您是否应该检查person.stuff
是否为数组?