【发布时间】:2019-03-19 19:08:53
【问题描述】:
Edit2 - 演示代码正在运行
Edit3 - 看来我设置广播组样式的方式破坏了功能......我隐藏了输入并改为显示跨度,这似乎是一个问题。
虽然我在过去几个月的 react 工作中获得了一些经验,但我一直不是 100% 清楚的是关于输入的最佳实践,特别是单选按钮、复选框和数字输入。
我目前有(我认为是)一种糟糕的方法来创建一个简单的 2 按钮单选按钮组:
const oneTwoFourOptions = ['2 Graphs', '4 Graphs'];
const oneTwoFourButtons =
(<form>
<div className='cbb-buttons cbb-buttons-clear' style={{ flexDirection: 'column' }}>
{oneTwoFourOptions.map((d, i) => {
return (
<label key={'onetwofour-' + i} style={{ margin: '0', height: '30px' }}>
<input
type={'radio'}
value={oneTwoFourOptions[i]}
disabled={loading}
checked={oneTwoFour === oneTwoFourOptions[i]}
onChange={this.handleOneTwoFourChange}
/>
<span style={{ width: '100%' }}>{oneTwoFourOptions[i]}</span>
</label>
);
})}
</div>
</form>);
...这是一个带有带有输入+跨度标签的div的表单,这似乎太多了。不用担心类名/样式和元素结构。
但是,这篇文章实际上是为了解决我正在尝试进行的数字输入,而这目前不起作用(在我的应用程序中,或者不幸的是在这个 stackoverflow 帖子中)。我正在积极调试这篇文章,但请参阅下面的关于我尝试数字输入的一般概述。
class App extends React.Component {
constructor(props) {
super(props);
this.state = {
minMinutes: 0
}
}
handleMinMinutesChange = (event) => {
this.setState({ minMinutes: event.target.value });
}
render() {
let minMinutesInput =
(<label className='cbb-number-input'>
<input
type='number'
name='min-minutes-input'
value={this.state.minMinutes}
onChange={this.handleMinMinutesChange}
/>
<span>{this.state.minMinutes}</span>
</label>);
return(
<React.Fragment>
{minMinutesInput}
</React.Fragment>
)
}
}
ReactDOM.render(
<App />,
document.getElementById('root')
);
label.cbb-number-input {
display: flex;
line-height: 0;
margin: 2px;
font-weight: 700;
}
input[type=number] {
width: 0;
height: 0;
visibility: hidden;
overflow: hidden;
}
span {
cursor: pointer;
display: flex;
justify-content: center;
align-items: center;
line-height: 1;
font-size: 14px;
width: 100px;
padding: 4px;
border-radius: 3px;
border: 1px solid #333333;
text-align: center;
}
<script src="https://cdnjs.cloudflare.com/ajax/libs/react/16.6.3/umd/react.production.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/react-dom/16.6.3/umd/react-dom.production.min.js"></script>
<div id='root'>
Come On Work!
</div>
在我的应用程序中,单击数字输入没有任何作用。它始终显示为零,这是初始应用程序。我不确定为什么更改功能不起作用,对此的任何帮助将不胜感激。特别是,我想避免为这个单一的数字输入使用过多的 div 和表单容器,但我当然需要它工作。
在此先感谢您的帮助!
编辑 - 如果您有关于创建和设置单选按钮、复选框和数字输入样式的 react-best-practices 的最佳、最新指南的来源,(以及还创建他们的处理函数),这甚至比解决我的帖子更好。谢谢
【问题讨论】:
-
你能提供一个codeandbox吗?
-
我认为你的构造函数中需要有
this.handleMinMinutesChange = this.handleMinMinutesChange.bind(this);? -
^ 不需要绑定,因为他使用了箭头函数。
-
代码运行良好。我刚刚检查过。
-
如果隐藏输入,您希望用户如何更改值?通过单击/箭头键/按钮?一定有什么。
标签: javascript reactjs button input