gpt4 book ai didi

javascript - 使用react-bootstrap从数组动态创建下拉菜单选项

转载 作者:行者123 更新时间:2023-12-03 14:03:11 26 4
gpt4 key购买 nike

我现在正在构建一个基于 drupal 的电子商务网站,但遇到了困难。一般来说,对于 react 和编码来说还是新手,但正在努力学习。因此,我使用 redux 和 Rest api 提取了所有数据,并且获取了我的产品、变体和属性。产品页面正在根据 url 设置特定产品,现在我需要能够通过下拉菜单选择不同的属性。目前,我有一个占位符下拉列表,与 React-bootstrap 文档中显示的匹配。但是,我需要根据保存属性的数组在该下拉列表中放置选项。

我确信这很简单,但我一直在四处寻找,但还没有找到有效的答案。希望大家能够帮忙。

当您查看代码时,请记住,sizes = [] 是我希望将数据作为下拉列表中的 optional 放置的数组。

这是产品页面:

import React, { Component} from 'react';
import '../../css/Home.css';
import MenuBar from "../sub-components/MenuBar";
import LeftMenuBar from "../sub-components/LeftMenuBar";
import "../../css/ProductPage.css"
import WomensWear from "../../media/WomensWear.jpg"
import {
Dropdown,
DropdownToggle,
DropdownMenu,
DropdownItem } from 'reactstrap';

class ProductPage extends Component {
constructor(props) {
super(props);

this.toggle = this.toggle.bind(this);
this.state = {
dropdownOpen: false
};
}

toggle() {
this.setState(prevState => ({
dropdownOpen: !prevState.dropdownOpen
}));
}

getProduct() {

let product = null;
let sizes = [];
if (this.props.products && this.props.products.items.length) {
product = this.props.products.items.find(o => o.path[0].alias === this.props.router.match.url);

if (product && this.props.variations && this.props.attributes) {
product.something = [];
for (let i = 0; i < product.variations.length; i++) {
let varid = product.variations[i].target_id;
let variation = this.props.variations.items.find(o => o.variation_id[0].value === varid);

variation.size = this.props.attributes.items.find(o => o.attribute_value_id[0].value === variation.attribute_size[0].target_id);

sizes.push({value: variation.size.attribute_value_id[0].value, name: variation.size.name[0].value});
product.something.push(variation);

console.log(sizes);
}
}
}
return product;
}


render() {
let style = {
height: this.props.height - 56,
};

let product = this.getProduct();

let body = product && product.body.length ? product.body[0].value : null;

return (
<div className="App" id="default">
<div className='MenuBar'>
<MenuBar/>
</div>
<div>
<div style={style} className="ProductPage row no-gutters">
<div className="col-xs-3 col-md-3">
<LeftMenuBar/>
</div>
<div className="outer col-xs-4 col-md-4">
<div>
<div id="ProductPlacement">
<img src={WomensWear} alt=""/>
<div id="alternate-pics">
<div id="alt-pic">
</div>
<div id="alt-pic">
</div>
<div id="alt-pic">
</div>
</div>
</div>
</div>
</div>
<div className="col-xs-5 col-md-5">
<div id="ImagePlacement">
<div className="ProductTitle">
<h1>First Product</h1>
</div>
<hr/>
<div className="ProductDescription">
<div dangerouslySetInnerHTML={{__html: body}} />
</div>
<div id="options">
<div id="color">
</div>
<div id="color2">
</div>
<div id="color3">
</div>
</div>
<div id="options">
<div>
<Dropdown isOpen={this.state.dropdownOpen} toggle={this.toggle}>
<DropdownToggle caret id="size-dropdown">
Size
</DropdownToggle>
<DropdownMenu>
<DropdownItem>1</DropdownItem>
<DropdownItem>3</DropdownItem>
<DropdownItem>5</DropdownItem>
</DropdownMenu>
</Dropdown>
<div className="AddToCart">
<button className="AddToCart">Add To Cart</button>
<button className="Price">$34.99</button>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
);
}
}

export default ProductPage;

最佳答案

React 的优点是你可以使用常规 JS。

<Dropdown isOpen={this.state.dropdownOpen} toggle={this.toggle}>
<DropdownToggle caret id="size-dropdown">
Size
</DropdownToggle>
<DropdownMenu>
{sizes.map(size => (
<DropdownItem>{size}</DropdownItem>
))}
</DropdownMenu>
</Dropdown>

旁注:select 似乎更适合此元素,但这不是您的问题。

关于javascript - 使用react-bootstrap从数组动态创建下拉菜单选项,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53530538/

26 4 0