最新消息:雨落星辰是一个专注网站SEO优化、网站SEO诊断、搜索引擎研究、网络营销推广、网站策划运营及站长类的自媒体原创博客

javascript - How do you implement "check all" in React with child components? - Stack Overflow

programmeradmin1浏览0评论

I've found a couple questions on here that sort of answer the question,

  • select all
  • managed state of controlled checkboxes

but they do not allow me to render a ponent with a checkbox.

What I'd like is something like this,

render: function () {
    var rows = [<ChildElement key={1} />, <ChildElement key={2} />];
    return (
    <ParentElement>{rows}</ParentElement>
    );
}

where my ChildElements each have their own check boxes that can be set to checked=true or checked=false whenever a global checkbox is checked or unchecked on the ParentElement.

Any suggestions? Cheers

I've found a couple questions on here that sort of answer the question,

  • select all
  • managed state of controlled checkboxes

but they do not allow me to render a ponent with a checkbox.

What I'd like is something like this,

render: function () {
    var rows = [<ChildElement key={1} />, <ChildElement key={2} />];
    return (
    <ParentElement>{rows}</ParentElement>
    );
}

where my ChildElements each have their own check boxes that can be set to checked=true or checked=false whenever a global checkbox is checked or unchecked on the ParentElement.

Any suggestions? Cheers

Share Improve this question edited May 8, 2020 at 8:40 artxur asked Mar 24, 2015 at 20:16 artxurartxur 1,9401 gold badge20 silver badges28 bronze badges 2
  • 1 Pass the state of the global checkbox to the ChildElement: <ChildElement key={1} checked={this.state.checkAll} /> – zerkms Commented Mar 24, 2015 at 20:18
  • Another answer here: Check all boxes in a fixed-data-table by using? – Jonny Buchanan Commented Mar 25, 2015 at 9:43
Add a ment  | 

1 Answer 1

Reset to default 7

I put together a gist for you to try but the basic idea is to maintain the state of the checkboxes in the parent and have a callback in the child that passes up its changed state.

http://jsfiddle/69z2wepo/4785/

var Row = React.createClass({
  getInitialState: function() {
    return {
      checked: false
    };
  },
  checkIt: function() {
    this.props.callback(this.props.index, !this.props.checked);
    return;
  },
  render: function() {
    return (
      <tr>
        <td><input type="checkbox" checked={this.props.checked} onChange={this.checkIt} /></td>
        <td>{this.props.obj.foo}</td>
      </tr>
    );
  }
});

var Table = React.createClass({
  getInitialState: function() {
    var rowState =[];
    for(var i = 0; i < this.props.rows.length; i++) {
      rowState[i] = false;
    }
    return {
      checkAll: false,
      rowState:rowState
    };
  },
  checkRow: function (id,value) {
    this.state.rowState[id] = value;
    if (this.state.checkAll) {
      this.state.checkAll = !this.state.checkAll;
    }
    this.setState({
      rowState: this.state.rowState,
      checkAll: this.state.checkAll
    });
  },
  checkAll: function () {
    var rowState =[];
    var checkState = !this.state.checkAll;
    for(var i = 0; i < this.state.rowState.length; i++) {
      rowState[i] = checkState;
    }

    this.state.checkAll = checkState;

    this.setState({
      rowState: rowState,
      checkAll: this.state.checkAll
    });
  },
  render: function() {
    var self = this;

    var rows = _.map(this.props.rows, function( row,index) {
      return (<Row obj={row} index={index} key={row.id} checked={self.state.rowState[index]} callback={self.checkRow} />);
    });
    return (
      <div className="table-holder container">
      <input type="checkbox" checked={this.state.checkAll} onChange={this.checkAll} />
      <table className="table">{rows}</table>
      </div>
    );
  }
});

var rows = [
  {
    'id' : 1,
    'foo': 'bar'
  },
  {
    'id' : 2,
    'foo': 'baarrrr'
  },
  {
    'id' : 3,
    'foo': 'baz'
  }
];

React.render(<Table rows={rows}/>, document.getElementById('container'));
发布评论

评论列表(0)

  1. 暂无评论
ok 不同模板 switch ($forum['model']) { /*case '0': include _include(APP_PATH . 'view/htm/read.htm'); break;*/ default: include _include(theme_load('read', $fid)); break; } } break; case '10': // 主题外链 / thread external link http_location(htmlspecialchars_decode(trim($thread['description']))); break; case '11': // 单页 / single page $attachlist = array(); $imagelist = array(); $thread['filelist'] = array(); $threadlist = NULL; $thread['files'] > 0 and list($attachlist, $imagelist, $thread['filelist']) = well_attach_find_by_tid($tid); $data = data_read_cache($tid); empty($data) and message(-1, lang('data_malformation')); $tidlist = $forum['threads'] ? page_find_by_fid($fid, $page, $pagesize) : NULL; if ($tidlist) { $tidarr = arrlist_values($tidlist, 'tid'); $threadlist = well_thread_find($tidarr, $pagesize); // 按之前tidlist排序 $threadlist = array2_sort_key($threadlist, $tidlist, 'tid'); } $allowpost = forum_access_user($fid, $gid, 'allowpost'); $allowupdate = forum_access_mod($fid, $gid, 'allowupdate'); $allowdelete = forum_access_mod($fid, $gid, 'allowdelete'); $access = array('allowpost' => $allowpost, 'allowupdate' => $allowupdate, 'allowdelete' => $allowdelete); $header['title'] = $thread['subject']; $header['mobile_link'] = $thread['url']; $header['keywords'] = $thread['keyword'] ? $thread['keyword'] : $thread['subject']; $header['description'] = $thread['description'] ? $thread['description'] : $thread['brief']; $_SESSION['fid'] = $fid; if ($ajax) { empty($conf['api_on']) and message(0, lang('closed')); $apilist['header'] = $header; $apilist['extra'] = $extra; $apilist['access'] = $access; $apilist['thread'] = well_thread_safe_info($thread); $apilist['thread_data'] = $data; $apilist['forum'] = $forum; $apilist['imagelist'] = $imagelist; $apilist['filelist'] = $thread['filelist']; $apilist['threadlist'] = $threadlist; message(0, $apilist); } else { include _include(theme_load('single_page', $fid)); } break; default: message(-1, lang('data_malformation')); break; } ?>