Получить все отмеченные флажки и их относительные данные с React + Redux - PullRequest
0 голосов
/ 15 апреля 2019

У меня есть запрос ajax в фоновом режиме, который извлекает сообщения форума и выводит их в виде цикла в виде элемента таблицы (<tr> и <td>). Все предметы имеют checkbox. Когда пользователь установил флажок и, наконец, нажал полную кнопку, я хочу получить все проверенные элементы, включая их данные. (Не только id или name)

Если вы посмотрите на мое демо, вы поймете, что я пытаюсь сделать.

Я пробовал с состояниями, но как добавить state к ajax ответным данным?

Для демонстрации я создал посты const. На самом деле это ответ ajax. У меня нет возможности изменять свои данные.

Живой редактор : https://stackblitz.com/edit/react-bzwmsg

Live Demo : https://react -bzwmsg.stackblitz.io

Ответы [ 2 ]

1 голос
/ 15 апреля 2019

Я изменил файлы, пожалуйста, просмотрите

index.js

import React, { Component } from 'react';
import { render } from 'react-dom';
import TableItem from './TableItem';
import './style.css';

class App extends Component {
  constructor() {
    super();
    this.state = {
      name: 'React',
      items:[]
    };

    this.handleSelected = this.handleSelected.bind(this)
    this.handleAddItem = this.handleAddItem.bind(this)

  }

  handleSelected() {
    // how to get items here? (when user select via checkboxes.)
    const items = this.state.items;
    alert("Selected items are: " + JSON.stringify(items));

  }

   handleAddItem(e,item){
      let items = [...this.state.items]
      var ids = items.map(ele => ele.id);
      if(e.target.checked)
          items.push(item)
      else {
        var index = ids.indexOf(item.id);
        items.splice(index,1);
      }

      this.setState({items});
    }

  render() {

    // posts actually came from ajax request...
    const posts = [
      {
        id: 1,
        name: 'Text 1'
      },
      {
        id: 2,
        name: 'Text 2'
      },
      {
        id: 3,
        name: 'Text 3'
      }
    ]
   console.log(this.state.items)
    return (
      <div>
        {posts.map((fx, i) => {
           { /* here i loop them and render... */ }
          return (
            <TableItem key={fx.id} data={fx} handleAddItem={this.handleAddItem} />
          )
        })}
        <div>
        { /* I need to get checked items outisde of TableItem. */ }
        <button onClick={this.handleSelected}>Get Selected Items (with ID, Name...)</button>
        </div>
      </div>
    );
  }
}

render(<App />, document.getElementById('root'));

TableItems.js

import React from 'react'



export default class TableItem extends React.Component {

  constructor(props) {
    super(props)
    this.state = { checked: false }
  }

  render() {

    return (
      <tr>
        <td><input onChange={(e) => this.props.handleAddItem(e,this.props.data) } type="checkbox" defaultChecked={this.state.checked} /></td>
        <td>{this.props.data.name}</td>
      </tr>
    )
  }
}

0 голосов
/ 15 апреля 2019

Это решило мою проблему: https://medium.com/@wlodarczyk_j/handling-multiple-checkboxes-in-react-js-337863fd284e

Но, если у вас есть лучшая альтернатива, я здесь, чтобы выслушать.

По сути, я создал карту и передал handleChangeдо TableItem.Поэтому, когда флажок установлен / снят, его статус передается родительскому компоненту.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...