Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/464.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/drupal/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 状态为(OFF-PENDING-ON)的交换机的自定义组件:ReactJS_Javascript_Html_Css_Reactjs_Setstate - Fatal编程技术网

Javascript 状态为(OFF-PENDING-ON)的交换机的自定义组件:ReactJS

Javascript 状态为(OFF-PENDING-ON)的交换机的自定义组件:ReactJS,javascript,html,css,reactjs,setstate,Javascript,Html,Css,Reactjs,Setstate,在这种情况下,需要实现三态切换。开关应具有三种切换状态,即关闭、挂起和打开 我已经尽了最大的努力开发了一种带开/关的开关。一直在努力添加“待定”状态。有人能帮我吗 我正在尝试实现以下切换: 以下是指向沙盒的链接: 以下是相同的代码: 应用程序组件 如果我理解你的意思,你想要一个复选框,首先选中->未选中->它没有完成,但在某个超时之前一直处于挂起状态->复选框最终被选中,当你想要选中它时,同样的情况也会发生 您需要两个状态,一个用于复选框状态,另一个用于挂起状态(两个布尔值),并且您需要延迟复

在这种情况下,需要实现三态切换。开关应具有三种切换状态,即关闭、挂起和打开

我已经尽了最大的努力开发了一种带开/关的开关。一直在努力添加“待定”状态。有人能帮我吗

我正在尝试实现以下切换:

以下是指向沙盒的链接:

以下是相同的代码:

应用程序组件
如果我理解你的意思,你想要一个复选框,首先选中->未选中->它没有完成,但在某个超时之前一直处于挂起状态->复选框最终被选中,当你想要选中它时,同样的情况也会发生

您需要两个状态,一个用于复选框状态,另一个用于挂起状态(两个布尔值),并且您需要延迟复选框的检查事件(以异步方式进行检查)

这里有一个链接,可以查看我的意思或立即阅读代码

从“React”导入React;
类应用程序扩展了React.Component{
建造师(道具){
超级(道具);
此.state={
checkboxState:true,
待定:错误,
}
this.handleCheckboxChange=this.handleCheckboxChange.bind(this);
}
HandleCheckBox更改(事件){
this.setState({pending:true});
//因为除非这样做,否则通常无法以异步方式访问事件
event.persist();
设置超时(()=>{
this.setState(state=>({
checkboxState:!state.checkboxState,
待定:false
}));
}, 2000)
}
render(){
返回(
{this.state.pending?“我正在等待”:“}

三态复选框 切克明 ) } } 导出默认应用程序;

请测试它(将粘贴复制到某个文件并运行它),然后告诉我结果。

请确保不能使用布尔值作为这种情况的状态。现在你打算用什么?包含字符串、数字、包含3项的数组的状态…@Amir Mousavi可能是包含值[已启用、待定、已禁用]的数组的状态!另一个问题是toggle的概念,它是一个两态组件,我建议使用@Amir Mousavi之类的东西,你能帮我解决吗?是的,当它从“选中”转换到“未选中”时,会添加一个间隔并添加“我正在等待”,反之亦然。但我想要的只是一个有三个值“开、挂、关”的状态。比如当我提交时,我需要将任何值传递给服务器,比如。但是,以一种具有适当状态值的反应方式,我编辑了我的示例,我希望它与您想要的三状态复选框相匹配。您在JSFIDLE中发布的内容与三状态复选框的问题有不同的要求,我认为可以用三个输入和一个状态变量轻松实现
import React from "react";
import ReactDOM from "react-dom";
import "./styles.css";

class App extends React.Component {
  constructor(props) {
    super(props);
    this.state = {
      isChecked: false
    };
  }

  handleChange = () => {
    this.setState({ isChecked: !this.state.isChecked });
  };

  render() {
    console.log("switch value", this.state.isChecked);
    return (
      <>
        <div>
          <label>
            <input
              checked={this.state.isChecked}
              onChange={this.handleChange}
              className="switch"
              type="checkbox"
            />
            <div>
              <div />
            </div>
          </label>
        </div>
      </>
    );
  }
}

const rootElement = document.getElementById("root");
ReactDOM.render(<App />, rootElement);


input[type="checkbox"].switch {
  position: absolute;
  opacity: 0;
}

input[type="checkbox"].switch + div {
  vertical-align: middle;
  width: 40px;
  height: 20px;
  border-radius: 999px;
  background-color: red;
  -webkit-transition-duration: 0.4s;
  transition-duration: 0.4s;
  -webkit-transition-property: background-color, box-shadow;
  transition-property: background-color, box-shadow;
  cursor: pointer;
}

input[type="checkbox"].switch + div {
  width: 94px;
  height: 48px;
}

input[type="checkbox"].switch:checked + div {
  background-color: #57bb00;
}

input[type="checkbox"].switch + div > div {
  float: left;
  width: 46px;
  height: 46px;
  border-radius: inherit;
  background: #ffffff;
  -webkit-transition-timing-function: cubic-bezier(1, 0, 0, 1);
  transition-timing-function: cubic-bezier(1, 0, 0, 1);
  -webkit-transition-duration: 0.4s;
  transition-duration: 0.4s;
  -webkit-transition-property: transform, background-color;
  transition-property: transform, background-color;
  pointer-events: none;
  margin-top: 1px;
  margin-left: 1px;
}

input[type="checkbox"].switch:checked + div > div {
  -webkit-transform: translate3d(46px, 0, 0);
  transform: translate3d(46px, 0, 0);
}