我使用下移,以创建一个下拉显示一些菜单选项。我创建了一个具有下移的可重用的React组件,但是现在我得到了这个错误:
Uncaught TypeError: items.map is not a function
at IconDropdown.react__WEBPACK_IMPORTED_MODULE_2___default.a.createElement.react__WEBPACK_IMPORTED_MODULE_2___default.a.createElement (index.jsx:29)以下是此错误引用的代码:
{isOpen ? (
<div className="dropdown-menu">
{items.map(item => ( // Specifically this map
<button
type="button"
{...getItemProps({ item })}
key={item}
className="dropdown-item"
>
<Icon icon={item.icon} /> {item.name}
</button>
))}
</div>
) : null}我在主屏幕组件中使用它,如下所示:
items = {
editUser: {
name: 'Edit Info',
icon: 'pencil-square-o'
},
changePassword: {
name: 'Change Password',
icon: 'lock'
},
deleteUsed: {
name: 'Delete user',
icon: 'trash-o'
}
};
render() {
return (
<IconDropdown items={this.items} />
)}预期行为:呈现一个菜单项列表,并显示相应的图标。
当前行为:I得到上述错误。我不知道这个代码有什么问题。在我看来,这是正确的。
如果你想要的话,我可以把整个组件都贴出来,让我知道。
更新,整个下拉组件:
import React, { Fragment } from 'react';
import PropTypes from 'prop-types';
import Downshift from 'downshift';
import Icon from 'lenses/common/components/Icon';
import './styles.scss';
const IconDropdown = ({ items, ...otherProps }) => (
<Fragment>
<Downshift {...otherProps}>
{({ getItemProps, isOpen, toggleMenu }) => (
<div>
<div className="btn-group">
<button
id="my-select"
type="button"
className="btn btn-primary dropdown-toggle dropdown-toggle-split"
onClick={toggleMenu}
data-toggle="dropdown"
aria-haspopup="true"
aria-expanded={isOpen}
>
<span className="sr-only">Toggle Dropdown</span>
</button>
{isOpen ? (
<div className="dropdown-menu">
{items.map(item => (
<button
type="button"
{...getItemProps({ item })}
key={item}
className="dropdown-item"
>
<Icon icon={item.icon} /> {item.name}
</button>
))}
</div>
) : null}
</div>
</div>
)}
</Downshift>
</Fragment>
);
IconDropdown.propTypes = {
items: PropTypes.shape({
name: PropTypes.string.isRequired,
icon: PropTypes.string
})
};
export default IconDropdown;发布于 2019-03-13 08:16:19
.map不存在于对象{},它只存在于数组[]。您可以:
Object.keys(items).map(...)lodash.map发布于 2019-03-13 08:15:59
尝试将Object.keys(objectname)放在数组映射之前。
map函数需要一个数组才能工作,使用Object.keys(objectname),您将把一个对象{}转换为一个有效的映射数组[]。
Object.keys(items).map(item => ...发布于 2019-03-13 08:16:14
在object上迭代--这应该是array --只需更改
items = {
editUser: {
name: 'Edit Info',
icon: 'pencil-square-o'
},
changePassword: {
name: 'Change Password',
icon: 'lock'
},
deleteUsed: {
name: 'Delete user',
icon: 'trash-o'
}
};至
items = [{
name: 'Edit Info',
icon: 'pencil-square-o'
},{
name: 'Change Password',
icon: 'lock'
},{
name: 'Delete user',
icon: 'trash-o'
}
];也可以使用items.enteries.map迭代对象。
https://stackoverflow.com/questions/55137072
复制相似问题