Skip welcome & menu and move to editor
Welcome to JS Bin
Load cached copy from
 
<!DOCTYPE html>
<html>
<head>
<script src="https://fb.me/react-15.1.0.js"></script>
<script src="https://fb.me/react-dom-15.1.0.js"></script>
  <meta charset="utf-8">
  <meta name="viewport" content="width=device-width">
  <title>JS Bin</title>
</head>
<body>
</body>
</html>
 
function addCheckbox() {
    const {checkboxes} = this.state,
        label = this.refs.label.value;
    checkboxes.push({
        checked: true,
        label
    });
    this.setState({
        checkboxes
    });
}
function toggleCheckbox(index) {
    const {checkboxes} = this.state;
    checkboxes[index].checked = !checkboxes[index].checked;
    this.setState({
        checkboxes
    });
}
function renderCheckboxes() {
    const {checkboxes, filter} = this.state;
    return checkboxes
        .filter(checkbox =>
            filter === 'ALL' ||
            filter === 'CHECKED' && checkbox.checked ||
            filter === 'UNCHECKED' && !checkbox.checked
        )
        .map((checkbox, index) =>
            <div>
                <label>
                    <input
                        type="checkbox"
                        checked={checkbox.checked}
                        onChange={toggleCheckbox.bind(this, index)}
                    />
                    {checkbox.label}
                </label>
            </div>
        );
}
function updateFilter(filter) {
    this.setState({
        filter
    });
}
class App extends React.Component {
    constructor(props) {
        super(props);
        this.state = {
            checkboxes: [],
            filter: 'ALL'
        };
    }
    render() {
        return (
            <div>
                {renderCheckboxes.call(this)}
                <input ref="label" type="text"/>
                <button onClick={addCheckbox.bind(this)}>Add Checkbox</button>
                <div>
                    <h4>Filters ({this.state.filter})</h4>
                    <a href="#" onClick={updateFilter.bind(this, 'ALL')}>ALL</a>
                    &nbsp;|&nbsp;
                    <a href="#" onClick={updateFilter.bind(this, 'CHECKED')}>CHECKED</a>
                    &nbsp;|&nbsp;
                    <a href="#" onClick={updateFilter.bind(this, 'UNCHECKED')}>UNCHECKED</a>
                </div>
            </div>
        );
    }
}
ReactDOM.render(<App />, document.body);
Output

You can jump to the latest bin by adding /latest to your URL

Dismiss x
public
Bin info
anonymouspro
0viewers