javascript - React - 如何将值传递给组件中的过滤函数?

标签 javascript reactjs

我正在尝试构建一个简单的待办事项应用程序。

我将所有任务存储在一个数组中,如下所示:

var TASKS = [
  {
    name: "Pay Bills",
    completed: false,
    id: 1,
  },
  {
    name: "Go shopping",
    completed: false,
    id: 2,
  },
  {
    name: "Pick up something",
    completed: false,
    id: 3,
  },
  {
    name: "Drink Coffee",
    completed: true,
    id: 4,
  },
];

我想通过将 bool 值作为属性传递给列表组件来将它们列出在单独的部分(todo/done)中。

我的组件结构在这里:

var Application = React.createClass({
  propTypes: {
    title: React.PropTypes.string,
  },

  getDefaultProps: function() {
    return {
      title: "Add item",
    }
  },

  onTodoAdd: function(name) {
      ...
  },

  onRemoveTask: function(index) {
      ...
  },

  onCompletedTask: function(index) {
      ...
  },

  render: function() {
    return (
      <div className="to-do">

        <Section title={this.props.title}>
          <AddTodoForm onAdd={this.onTodoAdd} />
        </Section>

        <Section title="to-do">
          <ListTasks initialTasks={TASKS} completedTasks={false} />
        </Section>

        <Section title="done">
          <ListTasks initialTasks={TASKS} completedTasks={true} />
        </Section>
      </div>
    );
  }
});

列表组件如下所示:

var ListTasks = React.createClass({
  propTypes: {
    initialTasks: React.PropTypes.array.isRequired,
    completedTasks: React.PropTypes.bool.isRequired,
  },

  getInitialState: function() {
    return {
      tasks: this.props.initialTasks,
    };
  },

  render: function() {
    return (
      <div>
        {this.state.tasks
        .filter(function(task, index, props) {
          return task.completed === props.completedTasks;
        })
        .map(function(task, index) {
          return(
            <Task
              name={task.name}
              key={task.id}
              completed={task.completed}
              onCompleted={function() {this.onCompletedTask(index)}.bind(this)}
              onRemove={function() {this.onRemoveTask(index)}.bind(this)}
            />
          );
        }.bind(this))}
      </div>
    );
  }
});

但是我不能通过

completedTasks={true/false}

到过滤器函数

props.completedTasks

请问有谁可以帮忙吗?

非常感谢。

最佳答案

问题出在渲染方法中的 ListTasks 组件内。

Array.filter的第三个参数method 不是组件 props ,是一个数组(调用了数组过滤器)。

要解决此问题,您可以定义一个新变量(props),并且可以通过 lexical scoping 在内部函数中访问它。

 render: function() {
    var props = this.props;
    return (
      <div>
        {this.state.tasks
        .filter(function(task, index) {
          return task.completed === props.completedTasks;
        })
        .map(function(task, index) {
          return(
            <Task
              name={task.name}
              key={task.id}
              completed={task.completed}
              onCompleted={function() {this.onCompletedTask(index)}.bind(this)}
              onRemove={function() {this.onRemoveTask(index)}.bind(this)}
            />
          );
        }.bind(this))}
      </div>
    );
  }

关于javascript - React - 如何将值传递给组件中的过滤函数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42053266/

相关文章:

javascript - Dojo 折线图上的自定义标记/工具提示

javascript更改事件在bootply中工作,而不在本地工作

javascript - 使用 pjax 时在页面加载时滚动到 div

javascript - 重置状态导致 React mixin 出现问题

reactjs - 在 React 中进行存储时 composeWithDevTools 'expected 1 argument, but got 2 error'

javascript - div float right 在 IE 中不起作用

javascript - 如何使用 Dart 向 JavaScript 函数发送和接收变量?

javascript - 是的,基于较高值的较低级别验证 - 不确定如何访问

javascript - 我如何将我的输入字段和按钮向上对齐以使其与其他按钮内嵌?

javascript - Redux 处理新项目和 ID