以下の説明のようにレンダリングするチェックボックスがたくさんあります。写真の青い丸でネストされた値を変更したい

タハ・ズナゼン:

これは私の状態です。 スクリーンショットを表示します。円の一部は、変更したい状態の一部です。

**これは私のチェックボックス入力です**

{this.state.data.map((elm) => (
    <div className={classes.rowContainer}>
      <h3>{elm.name}</h3>
      {elm.groupes.map((group) => (
        <input
          className={classes.checkBox}
          name={elm.name}
          groupes={group.groupName}
          checked={group.value}
          type='checkbox'
          onChange={this.changeValue}
        />
      ))}
    </div>
))}

これはコンポーネントに渡されるオブジェクトです:

 const data = [
  {
    name: 'Créer un groupe',
    groupes: [
      { name: 'commercial', value: true },
      { name: 'manager', value: false }
    ]
  },
  {
    name: 'Détruire un groupe ',
    groupes: [
      { name: 'commercial', value: false },
      { name: 'manager', value: false }
    ]
  }
]
ガッセンロウハイチ:

特定のvalueチェックボックスの特定のブール値を更新するには.map()、配列からの呼び出しインデックスを利用し、それらをonChangeチェックボックス入力のハンドラーに渡して、状態の正しい値を更新できます。

状態自体を変更せずに安全に更新するには、data配列をディープコピーし(この場合はJSON経由の往復を使用)、次にインデックスを使用して適切な値を更新し、新しいデータを状態に割り当てる必要があります。

これがどのように機能するかを示す実際のスニペットです:

const data = [{
    name: 'Créer un groupe',
    groupes: [
        { name: 'commercial', value: true },
        { name: 'manager', value: false }
    ]
}, {
    name: 'Détruire un groupe ',
    groupes: [
        { name: 'commercial', value: false },
        { name: 'manager', value: false }
    ]
}];
class App extends React.Component {
    constructor(props) {
        super(props);
        this.state = { data };
    }
    changeValue = (sectionIndex, groupIndex) => {
        const dataCopy = JSON.parse(JSON.stringify(this.state.data));
        const group = dataCopy[sectionIndex].groupes[groupIndex];
        group.value = !group.value;
        this.setState({ data: dataCopy });
    }
    render() {
        return (
            <div>
                { this.state.data.map((elm, i) => (
                    <div key={`${i}`}>
                        <h3>{elm.name}</h3>
                        { elm.groupes.map((group, j) => (
                            <input key={`${i}${j}`} name={elm.name}
                                   checked={group.value} type="checkbox"
                                   onChange={() => this.changeValue(i, j)} />
                        )) }
                    </div>
                )) }
            </div>
        );
    }
}
ReactDOM.render(<App />, document.getElementById('root'));
<script crossorigin src="https://unpkg.com/react@16/umd/react.development.js"></script>
<script crossorigin src="https://unpkg.com/react-dom@16/umd/react-dom.development.js"></script>
<div id="root"></div>

この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。

侵害の場合は、連絡してください[email protected]

編集
0

コメントを追加

0

関連記事

Related 関連記事

ホットタグ

アーカイブ