Javascript 切换按钮-如何保持不变?
我目前正在使用待办事项列表中的ToggleButtonGroup将我的输入分类为今天/明天/本周/无日期。如果未切换任何按钮,待办事项将归入“无日期”项下,否则将归入其他3个类别之一。 我的问题是,当我启动应用程序并在不切换任何内容的情况下输入todo时,todo将正确地排序在“无日期”下。但是,一旦我切换/取消切换任何[今天/明天/本周]选项,我就无法再在“无日期”下对任何内容进行排序。我怎样才能解决这个问题 类,该类包含切换:Javascript 切换按钮-如何保持不变?,javascript,reactjs,material-ui,Javascript,Reactjs,Material Ui,我目前正在使用待办事项列表中的ToggleButtonGroup将我的输入分类为今天/明天/本周/无日期。如果未切换任何按钮,待办事项将归入“无日期”项下,否则将归入其他3个类别之一。 我的问题是,当我启动应用程序并在不切换任何内容的情况下输入todo时,todo将正确地排序在“无日期”下。但是,一旦我切换/取消切换任何[今天/明天/本周]选项,我就无法再在“无日期”下对任何内容进行排序。我怎样才能解决这个问题 类,该类包含切换: import React from 'react'
import React from 'react'
import shortid from 'shortid'
import { Button, ButtonGroup, MenuItem, Select, TextField, InputBase } from '@material-
ui/core'
import { ToggleButton, ToggleButtonGroup } from '@material-ui/lab'
export default class TodoForm extends React.Component {
state = {
text: '',
date: ''
}
handleChange = (event) => {
this.setState({
[event.target.name]: event.target.value
})
}
handleToggleChange = (e, value) => {
if (this.state.date == value) {
this.setState({
date: ''
})
} else {
this.setState({
date: value
})
}
}
handleSubmit = (event) => {
event.preventDefault()
// If input field empty, do nothing.
if (this.state.text === '') {
return
}
// Submit the form.
this.props.onSubmit({
id: shortid.generate(),
text: this.state.text,
date: this.state.date,
complete: false
})
// Empty out input field after todo has been submitted.
this.setState({
text: ''
})
}
render() {
return (
<form className="td-form" onSubmit={this.handleSubmit}>
<div className="td-form-input"><InputBase
fullWidth={true}
name="text"
value={this.state.text}
onChange={this.handleChange}
placeholder="What do you need to get done?"
variant="outlined"
/>
</div>
<div className="td-form-buttons">
<ToggleButtonGroup value={this.state.date} onChange={this.handleToggleChange} name="date" id="date-select" exclusive={true} size="small">
<ToggleButton value="today">Today</ToggleButton>
<ToggleButton value="tomorrow">Tomorrow</ToggleButton>
<ToggleButton value="week">This week</ToggleButton>
</ToggleButtonGroup>
<Button className="mui-add" onClick={this.handleSubmit} variant="contained"
style={{
maxWidth: '36px',
maxHeight: '36px',
minWidth: '36px',
minHeight: '36px',
borderRadius: '36px',
margin: '16px'}}
>+</Button>
</div>
</form>
)
}
}
从“React”导入React
从“shortid”导入shortid
从'@material-
用户界面/核心'
从“@material ui/lab”导入{ToggleButton,ToggleButtonGroup}
将默认类导出到表单扩展React.Component{
状态={
文本:“”,
日期:''
}
handleChange=(事件)=>{
这是我的国家({
[event.target.name]:event.target.value
})
}
handleToggleChange=(e,值)=>{
if(this.state.date==值){
这是我的国家({
日期:''
})
}否则{
这是我的国家({
日期:价值
})
}
}
handleSubmit=(事件)=>{
event.preventDefault()
//如果输入字段为空,则不执行任何操作。
如果(this.state.text===''){
返回
}
//提交表格。
这个.props.onSubmit({
id:shortid.generate(),
text:this.state.text,
日期:this.state.date,
完整:错误
})
//提交todo后清空输入字段。
这是我的国家({
文本:“”
})
}
render(){
返回(
今天
明天
本周
+
)
}
}
包含TODO的类:
import React from 'react'
import { Button, IconButton } from '@material-ui/core'
import RemoveCircleOutlineIcon from '@material-ui/icons/RemoveCircleOutline';
export default props => (
<div className={props.todo.complete ? "" : "td-itemBackground"}>
<div className={props.todo.complete ? "td-itemCompleted" : "td-item"}>
<Button onClick={props.toggleComplete}
style={{
maxWidth: '36px',
maxHeight: '36px',
minWidth: '36px',
minHeight: '36px',
borderRadius: '36px',
margin: '16px'}}
>
<RemoveCircleOutlineIcon/>
</Button>
<div
style={{
textDecoration: props.todo.complete ? "line-through" : ""
}}
onClick={props.toggleComplete}
>
<div className="td-text">{props.todo.text}</div>
</div>
</div>
</div>
)
从“React”导入React
从“@material ui/core”导入{Button,IconButton}
从“@material ui/icons/RemoveCircleOutline”导入RemoveCircleOutlineIcon;
导出默认道具=>(
{props.todo.text}
)
将handleToggleChange代码更改为以下,以便在按钮未切换时,日期将正确设置为空。不确定是否最好的方法可以接受其他建议
handleToggleChange = (e, value) => {
if (this.state.date == 'today' || this.state.date == 'tomorrow' || this.state.date == 'week') {
this.setState({
date: ''
})
} else {
this.setState({
date: value
})
}
}
如果没有选择任何内容,我看到切换按钮组返回null。因此,您可以检查null并设置为no date。下面是切换按钮示例。
handleToggleChange=(e,值)=>{
如果(值===null){
这是我的国家({
日期:''
})
}否则{
这是我的国家({
日期:价值
})
}
}
能否包含呈现待办事项的组件?@drewrese,并且可以关闭。有一个不能切换的切换按钮是没有意义的。您描述的是RadioButton和RadioButtonGroup。另外,我认为OP不希望有一个“无日期”切换。没有按钮切换意味着“没有日期”。@drewrese好吧,如果你能查找源代码,你也许应该在表达错误的猜测之前这样做?或者,由于此处使用的库已标记,因此也很容易查看文档。我不认为有任何理由错误地将OP指向一个不存在的问题,并且可以很容易地排除它。@trix这是正确的。我不希望有一个“无日期”按钮-我希望在没有选择其他3个切换时,可以选择该按钮。该切换可以正确切换为“关闭”,但问题是它不会将状态更改回“无日期”“无日期”仅在我切换任何内容之前有效。