TLDR:使用defaultChecked而不是checked,工作jsbin.

try 设置一个简单的复选框,在选中时将其标签文本划掉.出于某种原因,当我使用该组件时,handleChange不会被解雇.谁能解释我做错了什么?

var CrossoutCheckbox = React.createClass({
  getInitialState: function () {
    return {
        complete: (!!this.props.complete) || false
      };
  },
  handleChange: function(){
    console.log('handleChange', this.refs.complete.checked); // Never gets logged
    this.setState({
      complete: this.refs.complete.checked
    });
  },
  render: function(){
    var labelStyle={
      'text-decoration': this.state.complete?'line-through':''
    };
    return (
      <span>
        <label style={labelStyle}>
          <input
            type="checkbox"
            checked={this.state.complete}
            ref="complete"
            onChange={this.handleChange}
          />
          {this.props.text}
        </label>
      </span>
    );
  }
});

用法:

React.renderComponent(CrossoutCheckbox({text: "Text Text", complete: false}), mountNode);

解决方案:

使用checked不会让基础值发生变化(显然),因此不会调用onChange处理程序.切换到defaultChecked似乎可以解决这个问题:

var CrossoutCheckbox = React.createClass({
  getInitialState: function () {
    return {
        complete: (!!this.props.complete) || false
      };
  },
  handleChange: function(){
    this.setState({
      complete: !this.state.complete
    });
  },
  render: function(){
    var labelStyle={
      'text-decoration': this.state.complete?'line-through':''
    };
    return (
      <span>
        <label style={labelStyle}>
          <input
            type="checkbox"
            defaultChecked={this.state.complete}
            ref="complete"
            onChange={this.handleChange}
          />
          {this.props.text}
        </label>
      </span>
    );
  }
});

推荐答案

要获取复选框的选中状态,路径为:

this.refs.complete.state.checked

另一种方法是从传递到handleChange方法的事件中获取:

event.target.checked

Reactjs相关问答推荐

React路由子路由将其重定向到带有参数的错误URL

使用setInterval判断数据的时间,然后在过期后从对象中删除;遇到性能问题

父组件更新后不重新呈现子组件

有没有方法覆盖NextJS 14中的布局?

Tailwind不使用@apply classes构建,并强制使用类似于移动的viewport

自定义变量默认、聚焦和填充时所需TextField中标签的星号 colored颜色

如何删除 bootstrap 手风琴上的边框

在 React 中是否有任何理由要记住 Redux 操作创建者?

Yup.number().integer() 不将 1.0 视为小数,如何解决这个问题?

在 React 中将 MUI 样式外包到单独的文件中?

从ReactDataGridtry 将数据传递给父组件

如何在Next.js应用程序中为路由[slug]生成.html文件?

VideoSDK api 不使用更新状态

React Final Form - 单选按钮在 FieldArray 中不起作用

页面加载时不显示数组中的数据

Select 建议后如何关闭 vscode 添加自动完成={}

刷新页面时状态改变问题

如何跨微前端 React 应用管理状态管理?

为什么我不能使用 formik 更改此嵌套对象中的值

下拉菜单在 AppBar 中未正确对齐