【发布时间】:2018-09-24 07:24:36
【问题描述】:
所以,期待我构建的两个简单组件:
import {Input} from 'semantic-ui-react';
import {Select} from 'semantic-ui-react';
const CategoriesDropdown = ({categories, onCategorySelected, selectedCategory}) => {
const handleChange = (e, {value})=>{
onCategorySelected(value);
};
return (
<Select placeholder="Select category" search options={categories} onChange={handleChange} value={selectedCategory} />
);
};
const IdentifiersInput = ({identifiers, onIdentifiersChanged}) => {
return (
<Input placeholder="Enter identifiers..." value={identifiers} onChange={onIdentifiersChanged}/>
);
};
到目前为止没有什么特别的。
但是现在,我正在构建另一个组件,在 flexbox 行中显示这两个组件:
<Box>
<CategoriesDropdown categories={categories} selectedCategory={selectedCategoryId}
onCategorySelected={this.selectCategory}/>
<IdentifiersInput identifiers={identifiers} onIdentifiersChanged={this.changeIdentifiers}/>
</Box>
不幸的是,它们都紧挨着显示,中间没有任何边距。
通常,我会在第二个元素中添加一个margin-left 样式,但是因为它是一个 React 组件,所以这不起作用。使用style={{marginLeft: '20px'}} 效果不佳,因为IdentifiersInput 组件不使用它。
我知道我可以通过这样做来修复它:<Input style={style} ... 在 IdentifiersInput 组件内。
然而,这似乎是实现这一目标的一种非常乏味的方式。基本上,我必须将它添加到我正在编写的每个组件中。
我显然必须在这里遗漏一些东西。我应该如何将这样的布局 CSS 属性应用于 React 组件?
【问题讨论】:
-
<Input {...this.props} />? -
当然,我仍然需要在 every single 组件中做一些事情。此外,它不会与现有值合并,例如如果组件已经指定了样式或类名。
-
您是否尝试将 css 添加到您的输入中而不是您的组件中?
-
我为什么要这样做?反应组件不应该是可重用吗?没有正当理由总是在
IdentifiersInput上留有左边距。在那种特定情况下,它恰好需要一个。在另一种情况下,它可能出现在CategoriesDropdown之前,而可能需要右边距。 -
什么保证金?你不能在你的情况下使用 flexbox 吗?
标签: javascript css reactjs