【问题标题】:showing select on check reactjs在检查 reactjs 上显示选择
【发布时间】:2018-02-08 17:38:40
【问题描述】:

我试图让选择显示/隐藏检查,但选择只是呈现并且不会消失也不会重新出现。我对反应还很陌生,所以我确定我做错了什么。

export default class TreeTest extends Component {
  constructor() {
    super();

    this.state = {
      checked: [
        '/grantSettingsPermissions/Admin',
        '/grantSettingsPermissions/ContentGroups/AddLocations', 
      ],
      expanded: [
        '/grantSettingsPermissions',
        '/grantSettingsPermissions/ContentGroups',
      ],
    };

    this.onCheck = this.onCheck.bind(this);
    this.onExpand = this.onExpand.bind(this);
    this.handleChange = this.handleChange.bind(this);
  }

  onCheck(checked) {
    console.log(checked);
    this.setState({
      checked,
    });
  }

  onExpand(expanded) {
    this.setState({
      expanded,
    });
  }

  handleChange() {
    this.setState({
      checked: !this.state.checked,
    });
  }

  render() {
    const { checked, expanded } = this.state;
    const content = this.state.checked
    ? <select>
  <option value="test1">test1</option>
  <option value="test2">test2</option>
</select>
      : null;
    return (
            <div>
              { content }
              <CheckboxTree
                  checked={checked}
                  expanded={expanded}
                  nodes={nodes}
                  onCheck={this.onCheck}
                  onExpand={this.onExpand}
                  expandDisabled={true}
                  onChange={ this.handleChange }
              />
          </div>
    );
  }
}

我觉得我只需要在 onCheck 函数中添加一些东西,但我并不完全确定。任何帮助都会很棒!

【问题讨论】:

    标签: javascript reactjs checkbox state


    【解决方案1】:

    我不确定您的组件 CheckboxTree 的作用,但这里有一些适用于常规输入控件的信息:

    您的事件处理程序 onChecked 期望选中的是您的复选框的值,但实际上它将是一个事件对象。所以你需要从事件对象中获取值并设置状态:

      onCheck(e) {
        console.log(e);
        let checked = {checked: e.target.value}
        this.setState({
          checked,
        });
      }
    

    更新

    我从文档中看到他们正在以相同的方式执行此操作,因此它应该可以工作,因为您的代码等效于:

      onCheck={checked => this.setState({ checked })}
      onExpand={expanded => this.setState({ expanded })}
    

    【讨论】:

    • 当我进行更改时,我收到一个控制台错误,提示它无法读取未定义的属性“值”。
    • 我正在使用 react-checkbox-tree 如果有帮助的话,我想我必须在那里更改源代码才能取消这样的东西,但我还是新手反应,我不太确定。
    • 嗯好吧,我又试了一次,得到了同样的控制台错误,我已将代码中的 onCheck={checked =&gt; this.setState({ checked })} 更改为您上面的内容:onCheck(e) { console.log(e); let checked = {checked: e.target.value} this.setState({ checked, }); } 我错过了什么吗?
    【解决方案2】:

    你的情况应该是:

    const content = this.state.checked.length === 0
      ? <select>
        <option value="test1">test1</option>
        <option value="test2">test2</option>
      </select>
      : null;
    

    【讨论】:

    • 哦,很好,这很有效。当所有框都未选中时,它正在工作。有没有办法检查每个单独的盒子?所以当一个被选中/取消选中时,会显示/隐藏一个选择?
    • 很难说,给我看看你的节点结构。稍后我会检查。
    • 我基本上是在使用这个开源的复选框树:github.com/jakezatecky/react-checkbox-tree/tree/master/src/js
    猜你喜欢
    • 2015-08-24
    • 1970-01-01
    • 1970-01-01
    • 2013-12-03
    • 1970-01-01
    • 1970-01-01
    • 2019-11-04
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多