Ich habe gerade angefangen React.js zu lernen und benutze Lynda.com, um den Überblick zu behalten. Obwohl die Videoserie, wie in an earlier post erwähnt, veraltet ist, konnte ich das Projekt mit Hilfe von anderen Stack Posts und Google zusammenstellen. Aber dieser Fehler hat mich verblüfft.Lynda.com React.js Objekte sind nicht als React Child gültig
Ich bin gerade dabei zu versuchen, neue Notizen zu einer Bulletin-Board-App hinzuzufügen. Wenn ich auf die Schaltfläche zum Hinzufügen (oben rechts auf dem Bildschirm) klicke, wird der Fehler Reaction Minified # 31 ausgelöst, da das von mir verwendete Objekt als React-Kind nicht gültig ist. Ich denke, es hat mit dem Knopf zu tun, den ich gerade erstellt habe, aber ich habe keine Ahnung, wie ich das beheben kann.
Ich benutze React Version 15.3.1 und Babel Version 5.8.29 (wie im Tutorial verwendet).
Note.js
var Note = React.createClass({
getInitialState: function() {
return {editing: false}
},
edit: function() {
this.setState({editing: true});
},
save: function() {
// var val = ReactDOM.findDOMNode(this.refs.newText).value;
this.props.onChange(ReactDOM.findDOMNode(this.refs.newText).value,
this.props.index);
this.setState({editing: false});
},
remove: function() {
this.props.onRemove(this.props.index);
},
renderDisplay: function() {
return (
<div className="note">
<p>{this.props.children}</p>
<span>
<button onClick={this.edit}
className="btn btn-primary glyphicon glyphicon-pencil"/>
<button onClick={this.remove}
className="btn btn-danger glyphicon glyphicon-trash"/>
</span>
</div>
);
},
renderForm: function() {
return (
<div className="note">
<textarea ref="newText" defaultValue={this.props.children}
className="form-control"></textarea>
<button onClick={this.save} className="btn btn-success btn-sm glyphicon glyphicon-floppy-disk" />
</div>
)
},
render: function() {
if (this.state.editing) {
return this.renderForm();
}
else {
return this.renderDisplay();
}
}
});
var Board = React.createClass({
propTypes: {
count: function(props, propName) {
if (typeof props[propName] !== "number") {
return new Error ('The count property must be a number');
}
if (props[propName] > 100) {
return new Error ('Creating' + props[propName] + 'is silly');
}
}
},
getInitialState: function() {
return {
notes: []
};
},
add: function(text){
var array = this.state.notes;
array.push(text);
this.setState({notes:array});
},
update: function(newText, i) {
var array = this.state.notes;
array[i] = newText;
this.setState({notes:array});
},
remove: function(i) {
var array = this.state.notes;
array.splice(i, 1);
this.setState({note:array});
},
eachNote: function(note, i) {
return (
<Note key={i}
index={i}
onChange={this.update}
onRemove={this.remove}
>{note}</Note>
);
},
render: function() {
return <div className="board">
{this.state.notes.map(this.eachNote)}
<button className="btn btn-sm glyphicon glyphicon-plus"
onClick={this.add}></button>
</div>
}
});
ReactDOM.render(<Board count={10}/>,
document.getElementById('react-container'));
Also sollte meine Add-Funktion stattdessen so aussehen? 'add: Funktion (Text) { var array = this.state.notes; array.push (Text); this.setState ({notizen}) } ' ' Oder bin ich komplett ausgeschaltet? –
Nein, das ändert nur die Art, wie Sie das Ereignis zum Array hinzufügen. Das Ergebnis wird dasselbe sein. Lassen Sie mich das fragen: Was erwarten Sie von 'text' in der Funktion' add'? –
Ja, das ist, was ich dachte. Wie es im Video erklärt wird und wie ich die Dinge verstehe, möchte ich, dass Text zum Notizen-Array hinzugefügt wird, wenn ich auf die Schaltfläche "Hinzufügen" klicke. Dies wird eine neue Notiz erstellen und auf der Tafel platzieren. –