javascript - 在 React.js 中计算选中的复选框

标签 javascript checkbox reactjs

我正在使用这样的文档结构

render() {
return (
    <div className="MyComponent">
        <ul className="">
            {parseRecommendations(this.props.recommendations)}
        </ul>
    </div>
);
}

function parseRecomendations(recommendations) {
    return recommendations.map((recommendation, key) => {
        return (<Recommendation data={recommendation} key={key} />);
    });
}

其中每个推荐都是它自己的包含复选框的组件

class Recommendation extends Component {
    const recommendation = this.props.data;
    const pageUrl = recommendation.url;

    return (
        <li className="article-item" key={key}>
            <div className="article-info">
                <input type="checkbox" defaultChecked="checked" aria-described-by={recommendation.pii} />
                <a className="journal-title" href={pageUrl} id={recommendation.pii}>{recommendation.title}</a>
            </div>
        </li>
    );

我想要一个标题为 [下载 (x) 个 PDF],其中 x 是选中复选框的数量。在这种情况下如何找到 x 的值?

最佳答案

您需要在数据中存储有关输入是否被“选中”的信息。然后,简单地计算带有真实“已检查”标志的项目。

这是我的解决方案。你应该能够在这里获得原理并修改你的代码。

const data = [
    { checked: false, value: 'document 1' },
    { checked: true, value: 'document 2' },
    { checked: true, value: 'document 3' },
    { checked: false, value: 'document 4' },
    { checked: false, value: 'document 5' },
];

const Item = props => (
    <div>
        <input type="checkbox" checked={props.checked} onChange={props.onCheckChange} />
        { props.value }
    </div>
)
var Hello = React.createClass({
    getInitialState() {
        return {
            items: this.props.items.concat(),
        };
    },

    onCheckChange(idx) {
        return () => {
            const items = this.state.items.concat();
            items[idx].checked = !items[idx].checked;
            this.setState({items});
        }
    },

    totalChecked() {
        return this.state.items.filter(props => props.checked).length;
    },

  render() {
    return (
            <div>
                { this.state.items.map((props, idx) => (
                    <Item {...props} key={idx} onCheckChange={this.onCheckChange(idx)} />
                )) }
                Total checked: { this.totalChecked() }
            </div>
        );
  }
});

ReactDOM.render(
  <Hello items={data} />,
  document.getElementById('container')
);

关于javascript - 在 React.js 中计算选中的复选框,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35987097/

相关文章:

python - 相同高度的 Tkinter 列表框和复选框

html - 在没有标签标签的情况下设置复选框样式

javascript - 如何获取用户输入,将其作为字符串传递给函数,并在屏幕上呈现函数结果?

javascript - webpack 中的无效配置对象

javascript - Python3 执行 Javascript

javascript - 使用 Angular 5 和 Node js 后端的 get 方法未正确发送多个参数

javascript - 用户触发的 'click'事件回调的执行与编程触发的有什么区别?

javascript - 在另一个函数内更改 settimeout 内的变量

javascript - 复选框在 Material 设计和 angularjs 中不会动态更改状态

node.js - 如何安装和使用 semantic-ui-react