Я новичок в реакции 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 . Итак, у меня нет пути, по которому я могу пройти через это состояние. есть ли способ сделать это?
Нет, забыл добавить
пожалуйста, сохраняйте четкий код, чтобы мы могли определить проблему
Извините за эту ошибку
теперь тоже неправильно, где рендер()
обновил вопрос



![Безумие обратных вызовов в javascript [JS]](https://i.imgur.com/WsjO6zJb.png)


Вы можете обернуть динамическое свойство под ключ и передать его.
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
}
})
и передать его ребенку соответственно.
Я хочу передать его дочернему компоненту.
как насчет setState?
Привет, мне нужно что-то изменить в методе handleTableCheckboxChange?
Да, вы должны изменить все методы, в которых вы звоните setState
Он имеет этот const uncheckedItems = this.props.jobs.filter((item) => !this.state[item.jdName])
не могли бы вы проверить со вторым методом, я запутался
это получает только одну пару значений ключа, она должна иметь все, что присутствует в этом массиве
есть ли что-нибудь, что я могу сделать? Потому что теперь я получаю синтаксические ошибки. для этого оператора спреда.
handleCheckBox = () => { this.setState({ isCheckd: !this.state.isCheckd }, () => { this.props.jobs.forEach((item) => this.setState(prevState => { dynamicProp: { ...prevState.dynamicProp, [item.jdName]: prevState.isCheckd } }) ) }); } использовал это. для оператора распространения говорится, что ожидается объявление или заявление
Я добавил ваш обновленный код, но все равно выдает ту же ошибку
Итак, скобки здесь не было. поэтому из-за этого он выдавал мне эту ошибку. Теперь у него есть все объекты
Итак, в этом сейчас, если я проверю один, тогда все проверяются
Я обновил код, который я пробовал для второго метода, не могли бы вы проверить это
ваша функция render() работает правильно без return(), а также без родительского закрывающего элемента