ユーザーが肉製品を選択すると、uiはjsonデータファイルからその肉のカテゴリを表示する小さなReactアプリケーションを構築しようとしています。私はクラスProductCategoryRowとSelectProduct関数の親としてProductsクラスを持っています。 Productsクラスで状態を設定し、その小道具をProductCategoryRowとSelectProductに渡す方法について少し混乱します。事前共有状態をツリー上に持ち上げる
0
A
答えて
0
で
function SelectProduct (props) {
const products = ['All', 'Beef', 'Lamb', 'Poultry'];
return (
<ul className='products'>
{products.map(function (prod) {
return (
<li
style={prod === props.selectedProduct ? { color: '#d0021b' }:null}
onClick={props.onSelect.bind(null, prod)}
key={prod}>
{prod}
</li>
)
})}
</ul>
)};
class ProductCategoryRow extends React.Component {
constructor(props) {
super(props);
this.state = {
list: list,
};
this.onDismiss = this.onDismiss.bind(this);
}
onDismiss(id) {
const isNotId = item => item.objectID !== id;
const updatedList = this.state.list.filter(isNotId);
this.setState({ list: updatedList });
}
render() {
return (
<div className="container">
{ this.state.list.map(item =>
<div key={item.objectID} className="product-category-row">
<div>{item.category}</div>
<div>{item.meatCut}</div>
<div>{item.cooking}</div>
<div>{item.price}</div>
<div>
<button
onClick={() => this.onDismiss(item.objectID)}
type="button"
>
Dismiss
</button>
</div>
</div>
)}
</div>
)
}
}
SelectProduct.propTypes = {
selectedProduct: PropTypes.string.isRequired,
onSelect: PropTypes.func.isRequired,
}
class Products extends React.Component {
constructor (props) {
super(props);
this.state = {
selectedProduct: 'All',
lists: null
};
this.updateProduct = this.updateProduct.bind(this);
}
componentDidMount() {
this.updateProduct(this.state.selectedProduct);
}
updateProduct(prod) {
this.setState(function() {
return {
selectedProduct: prod,
lists: null
}
})
}
render() {
return (
<div>
<SelectProduct
selectedProduct={this.state.selectedProduct}
onSelect={this.updateProduct}
/>
<ProductCategoryRow />
</div>
)
}
}
export default Products;
おかげで、製品を選択したときには、すでにあなたの親コンポーネントの状態を更新しているので、それは良いです!すでにupdateProductバックSelectProduct` `から渡された` prod`であなたの状態を更新しているよう
function SelectProduct (props) {
const products = ['All', 'Beef', 'Lamb', 'Poultry'];
return (
<ul className='products'>
{products.map(function (prod) {
return (
<li
style={prod === props.selectedProduct ? { color: '#d0021b' }:null}
onClick={props.onSelect.bind(null, prod)}
key={prod}>
{prod}
</li>
)
})}
</ul>
)};
class ProductCategoryRow extends React.Component {
constructor(props) {
super(props);
this.state = {
list: list,
};
this.onDismiss = this.onDismiss.bind(this);
}
onDismiss(id) {
const isNotId = item => item.objectID !== id;
const updatedList = this.state.list.filter(isNotId);
this.setState({ list: updatedList });
}
render() {
return (
<div className="container">
{ this.state.list.map(item =>
<div key={item.objectID} className="product-category-row">
<div>{item.category}</div>
<div>{item.meatCut}</div>
<div>{item.cooking}</div>
<div>{item.price}</div>
<div>
<button
onClick={() => this.onDismiss(item.objectID)}
type="button"
>
Dismiss
</button>
</div>
</div>
)}
</div>
)
}
}
SelectProduct.propTypes = {
selectedProduct: PropTypes.string.isRequired,
onSelect: PropTypes.func.isRequired,
}
class Products extends React.Component {
constructor (props) {
super(props);
this.state = {
selectedProduct: 'All',
lists: null
};
this.updateProduct = this.updateProduct.bind(this);
}
componentDidMount() {
this.updateProduct(this.state.selectedProduct);
}
updateProduct(prod) {
this.setState(function() {
return {
selectedProduct: prod,
lists: null
}
})
}
render() {
return (
<div>
<SelectProduct
selectedProduct={this.state.selectedProduct}
onSelect={this.updateProduct}
/>
<ProductCategoryRow selectedProduct={this.state.selectedProduct} />
</div>
)
}
}
export default Products;
+0
onSelect = {this.updateProduct}に、{item.category}に一致するアイテムのみをProductCategoryRowから表示させるにはどうすればよいですか – BigNom
関連する問題
- 1. リアクトで状態を持ち上げる
- 2. リアクションで状態を持ち上げる正しい方法
- 3. サブドメイン上の共有セッション状態
- 4. Tkinterの他のキャンバスの上にキャンバスを持ち上げる
- 5. 状態間のRedux共有データ、最上位オプション
- 6. 共有状態が
- 7. JMH状態クラスと共有対非共有状態
- 8. skstoreproductviewcontroller:打ち上げ
- 9. reactxの状態ツリーを上書きする
- 10. Highcharts:選択状態に積み上げ縦棒増加borderWidth上記フィドルで
- 11. スカラ関数をHttpRequestプロセッサに持ち上げる
- 12. レコード構文を使用してデータコンストラクタに持ち上げる?
- 13. 条件打ち上げ
- 14. RabbitMQのは、打ち上げ
- 15. 仕上げ後の状態を変更してください
- 16. タプルで作業するパイプを持ち上げる
- 17. IIS7:状態サーバーを持つアプリケーション間でセッションを共有する
- 18. アプリケーションストアの状態を共有する
- 19. サーバ状態で多くのG gracefull仕上げ
- 20. JavaScriptがなぜ変数を持ち上げるのですか?
- 21. 私のプレイヤーをユニティで泳ぐ、掴む、持ち上げる
- 22. 成分を介して反応して持ち上げる
- 23. Scalametaで文字列を持ち上げる
- 24. キーボードは入力モードでビューを持ち上げます
- 25. 持ち上げ機能と高次機能の違い
- 26. React - 処理小道具の重い持ち上げ
- 27. Cで余分なパラメータを取る関数を持ち上げるには?
- 28. ViewModels間の状態の共有
- 29. Flinkのオペレータ間の状態の共有
- 30. 兄弟コンポーネント間のVue共有状態
ルックス:今、あなたのrenderメソッドで
selectedProduct
小道具としてProductCategoryRow
コンポーネントにthis.state.selectedProduct
に渡す必要があります。 'selectedProduct = {this.state.selectedProduct}'を 'ProductCategoryRow'の小道具として追加する必要があり、選択した製品にアクセスする必要があります。または私は何かを逃している? –助けてくれてありがとう、私は、別のコンポーネントに小道具を渡す方法を理解するのに少し問題があります。 – BigNom