Как передать динамически созданные реквизиты компоненту?

Я новичок в реакции js. Здесь у меня есть таблица с функциональностью флажка. В ней я создаю динамическое состояние и хочу передать его дочернему компоненту, где находится фактическая таблица.

Мой код похож на

JobList.js

    class JobList extends React.Component { 

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

     handleCheckBox = () => {
        this.setState({
          isCheckd: !this.state.isCheckd
        }, () => {
          this.props.jobs.forEach((item) => this.setState({ [item.jdName]: this.state.isCheckd }))
        });
      }

      handleTableCheckboxChange = (e) => {
        this.setState({
          [e.target.name]: e.target.checked
        }, () => {
          const uncheckedItems = this.props.jobs.filter((item) => !this.state[item.jdName])
          this.setState({
            isCheckd: uncheckedItems.length === 0 ? true : false
          });
        });
      }
     return() (
       <table className = "table" id = "actions-table">
                  <tbody>
                    <tr>
                      <td className = "text-right mr-1"><input type = "checkbox" checked = {this.state.isCheckd} onChange = {this.handleCheckBox} />
    </td> </tr></tbody></table>
    }
 <UserJobsTabel
              jobList = {filteredList}
              sortAscending = {this.sortData}
              sortCountAndScoreAscending = {this.sortNumbersAscending}
              addNewRow = {this.addNewRow}
              isRowAddingEditorVisible = {this.props.isRowAddingEditorVisible}
              removeRow = {this.removeRow}
              checked = {this.state.isCheckd}
              handleTableCheckboxChange = {this.handleTableCheckboxChange} />
}

const mapStateToProps = (state) => {
  return {
    jobs: state.UserJobs.jobList,
}
}

Теперь в этом коде я пытаюсь установить и снять флажки.

this.state[item.jdName] so this state is getting generated for the each element in the array.

Теперь я хочу передать это UserJobsTable .

   const UserJobsTable = (props) => {
     return (
    <tbody className = "text-center">
              {props.isRowAddingEditorVisible && <RowAddingEditor removeRow = {props.removeRow} />}
              {props.jobList && props.jobList && props.jobList.length > 0 && props.jobList.map((item, key) => {
                return (
                  <tr key = {key}>
                    <td align = "center"> <input type = "checkbox" name = {props.key} checked = {props[item.jdName]}   onChange = {props.handleTableCheckboxChange} /></td></tr></tbody> ) }




 handleTableCheckboxChange = (e) => {
      this.props.jobs.filter((item) => this.setState(prevState => ({
        dynamicProp: {
          ...prevState.dynamicProp,
          [item.jdName]: e.target.name === [item.jdName] ? true : false
        }
      })
      ))
  }

Я хочу установить его на checkbox . Итак, у меня нет пути, по которому я могу пройти через это состояние. есть ли способ сделать это?

ваша функция render() работает правильно без return(), а также без родительского закрывающего элемента

Kishan Jaiswal 25.03.2019 06:49

Нет, забыл добавить

Ganesh Kaspate 25.03.2019 06:50

пожалуйста, сохраняйте четкий код, чтобы мы могли определить проблему

Kishan Jaiswal 25.03.2019 06:51

Извините за эту ошибку

Ganesh Kaspate 25.03.2019 06:52

теперь тоже неправильно, где рендер()

Kishan Jaiswal 25.03.2019 06:53

обновил вопрос

Ganesh Kaspate 25.03.2019 06:56
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
В настоящее время производительность загрузки веб-сайта имеет решающее значение не только для удобства пользователей, но и для ранжирования в...
Безумие обратных вызовов в javascript [JS]
Безумие обратных вызовов в javascript [JS]
Здравствуйте! Юный падаван 🚀. Присоединяйся ко мне, чтобы разобраться в одной из самых запутанных концепций, когда вы начинаете изучать мир...
Система управления парковками с использованием HTML, CSS и JavaScript
Система управления парковками с использованием HTML, CSS и JavaScript
Веб-сайт по управлению парковками был создан с использованием HTML, CSS и JavaScript. Это простой сайт, ничего вычурного. Основная цель -...
JavaScript Вопросы с множественным выбором и ответы
JavaScript Вопросы с множественным выбором и ответы
Если вы ищете платформу, которая предоставляет вам бесплатный тест JavaScript MCQ (Multiple Choice Questions With Answers) для оценки ваших знаний,...
0
6
63
1

Ответы 1

Вы можете обернуть динамическое свойство под ключ и передать его.

this.state = {
  isCheckd: false,
  dynamicProp: {}
}

handleCheckBox = () => {
  this.setState({
    isCheckd: !this.state.isCheckd
  }, () => {
    this.props.jobs.forEach((item) => 
      this.setState(prevState => { 
        dynamicProp: {
          ...prevState.dynamicProp,
          [item.jdName]: prevState.isCheckd
        }
      })
    )
  });
}

Во всех ваших setState вы делаете

this.setState(prevState => {
  dynamicProp: {
    ...prevState.dynamicProp,
    [item.jdName]: prevState.isCheckd
  }
})

и передать его ребенку соответственно.

Я хочу передать его дочернему компоненту.

Ganesh Kaspate 25.03.2019 06:57

как насчет setState?

Ganesh Kaspate 25.03.2019 06:58

Привет, мне нужно что-то изменить в методе handleTableCheckboxChange?

Ganesh Kaspate 25.03.2019 07:15

Да, вы должны изменить все методы, в которых вы звоните setState

varun agarwal 25.03.2019 07:15

Он имеет этот const uncheckedItems = this.props.jobs.filter((item) => !this.state[item.jdName])

Ganesh Kaspate 25.03.2019 07:16

не могли бы вы проверить со вторым методом, я запутался

Ganesh Kaspate 25.03.2019 07:19

это получает только одну пару значений ключа, она должна иметь все, что присутствует в этом массиве

Ganesh Kaspate 25.03.2019 07:33

есть ли что-нибудь, что я могу сделать? Потому что теперь я получаю синтаксические ошибки. для этого оператора спреда.

Ganesh Kaspate 25.03.2019 08:10

handleCheckBox = () => { this.setState({ isCheckd: !this.state.isCheckd }, () => { this.props.jobs.forEach((item) => this.setState(prevState => { dynamicProp: { ...prevState.dynamicProp, [item.jdName]: prevState.isCheckd } }) ) }); } использовал это. для оператора распространения говорится, что ожидается объявление или заявление

Ganesh Kaspate 25.03.2019 08:19

Я добавил ваш обновленный код, но все равно выдает ту же ошибку

Ganesh Kaspate 25.03.2019 09:09

Итак, скобки здесь не было. поэтому из-за этого он выдавал мне эту ошибку. Теперь у него есть все объекты

Ganesh Kaspate 25.03.2019 09:35

Итак, в этом сейчас, если я проверю один, тогда все проверяются

Ganesh Kaspate 25.03.2019 09:55

Я обновил код, который я пробовал для второго метода, не могли бы вы проверить это

Ganesh Kaspate 26.03.2019 05:09

Другие вопросы по теме