私は自分自身を教えています。状態を調べるコンポーネントがあり、新しいアイテムが追加されると子コンポーネントが追加されます。私が今しようとしているのは、クリックして追加された子コンポーネントを削除することです。しかし、私が行う場合、私はリンクの自然な出来事を得るように見えることはできませんe.preventDefault()
私はpreventDefaultは未定義の関数ではありません。以下はリンクのクリック時に子コンポーネントを削除する
私のコードで、
import React, { Component } from 'react';
import InvoiceForm from './InvoiceForm';
import InvoiceItemForm from './InvoiceItemForm';
class GenerateInvoice extends Component {
constructor(props) {
super(props);
this.state = {
invoice: {
items : []
}
};
this.onAddChild = this.onAddChild.bind(this);
this.removeItem = this.removeItem.bind(this);
}
render() {
const children = [];
for (var i = 0; i < this.state.invoice.items.length; i += 1) {
children.push(
<InvoiceItemForm
key={i}
number={i}
remove={this.removeItem} />
);
}
return(
<div>
<a href="" onClick={this.onAddChild}>Add New Item</a>
{children}
</div>
)
}
removeItem = (e, itemIndex) => {
e.stopPropagation();
alert("..removing...");
// let invoice = this.state.invoice;
// let updatedItems = this.state.invoice.items.splice(index, 1); //remove element
// let updateInvoice = { ...invoice, items:updatedItems}
// this.setState({ invoice }); //update state
}
onAddChild = (e) => {
e.preventDefault();
let invoice = this.state.invoice;
// creates an updated version of the items without changing the original value
let updatedItems = invoice.items.push({ 'id': 'INV001' });
// creates a new version of the invoice with the updated items
let updateInvoice = { ...invoice, items: updatedItems };
// update the invoice on the state to the new version
this.setState({ invoice });
}
}
輸出デフォルトGenerateInvoice。 InvoiceItemForm
コンポーネント、onClick={props.remove(props.number)}
に
子コンポーネント
import React from 'react';
const InvoiceItemForm = (props) => {
console.log(props);
return(
<div>
<p>Hello {props.number}</p>
<a href="" onClick={props.remove(props.number)}>Remove</a>
</div>
)
}
export default InvoiceItemForm;
と私のサンドボックスへのリンク、
https://codesandbox.io/s/0qx9w1qrwv
これは私が混乱してきた場所で、これがそれぞれの再レンダリングで新しい機能を作成するため、非効率的なのでしょうか? – Udders
あなたはそうです。私の編集を参照してください。私は自分の意見では、それぞれのレンダリングがそれほど悪くない新しい機能を作成すると言いますが、それを避けることはマイクロ最適化です。 –