首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >function:_this2.props.variations.find不是一个函数

function:_this2.props.variations.find不是一个函数
EN

Stack Overflow用户
提问于 2018-11-14 02:42:28
回答 1查看 364关注 0票数 0

不知道为什么我会犯这个错误。我需要循环通过变体,并找到包含变量变量的id。在我看来,这是对的,但显然不是。我相信这里的每个人都比我聪明得多,尽管哈哈,我在这方面仍然是个新手。

这个函数应该允许我过滤状态,以便我只有所需的数据,并且可以在页面中显示该数据,而不是包含我所有drupal产品的状态。也许还有一种更有效的方法来做到这一点,我不确定。

下面是代码:

代码语言:javascript
复制
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
        }));
    }

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

        let product = this.props.products.items.find(o => o.path[0].alias === this.props.router.match.url);
        console.log(product);
        console.log(this.props.variations);

        let variationList = [];

        if (product && this.props.variations) {
            for (let i = 0; i < product.variations.length; i++) {
                let varid = product.variations[i].variation_id;
                let variation = this.props.variations.find(o => o.path[0].alias === varid);
                variationList.push(variation);
            }
        }

        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;
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-03-07 22:55:28

我也遇到了这个问题,经过反复试验发现是因为copy+paste。检查您的还原器,以确保您没有设置对象{}或其他类型的默认值,而不是数组[]

在我的例子中(顺便说一句,这是ES6语法):

代码语言:javascript
复制
const someReducer = (state = {}, action) => {
    switch (action.type) {
        case 'reducer type':
            // get the data etc.
            return [];
        default:
            return state;
    }
};

当我应该:

代码语言:javascript
复制
const someReducer = (state = [], action) => {
    switch (action.type) {
        case 'reducer type':
            // get the data etc.
            return [];
        default:
            return state;
    }
};

注意我设置默认值的第一行。这是在api调用挂起时使用的,所以如果它恰好到达使用.find()的代码,那么您将得到错误。

这是非常容易错过的,因为数据检索得太快了,所以您很难看到数据是错误的类型。只要确保您的默认设置,无论您是如何设置,是正确的类型!希望这能帮到别人!

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/53292435

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档