<に反応--------------------- EDIT ------------ ------------>異なる小道具と複数のアイテムをレンダリングするES6
私はただ一つのonChange関数しか必要としないメソッドを望んでいましたが、それは答えのようには見えませんでした。しかし、私は間違っていた。 Kind user's answerのおかげで、私はそれが可能であることを理解することができました(あなたはコメントから分かるように、すぐにではありませんが)。それゆえ、私はテストして作業している自分のバージョンを作成しました。
我々はindex.js
import React, { Component } from 'react'
import ReactDOM from 'react-dom'
import CheckboxesField from './CheckboxesField'
class Index extends Component {
constructor() {
super()
this.state = {
checked: ["two", "five"],
allPossible: ["one", "two", "three", "four", "five"],
}
this.onCheck = this.onCheck.bind(this)
}
onCheck(e, v) {
const checked = this.state.checked
if (v) {
checked.push(e.target.id)
} else {
checked.splice(checked.indexOf(e.target.id), 1)
}
this.setState({ checked })
}
render() {
return (
<div className="index">
<CheckboxesField
allPossibleCheckboxes={this.state.allPossible}
checked={this.state.checked}
onCheck={this.onCheck}/>
</div>
)
}
}
export default Index
ReactDOM.render(<Index />, document.getElementById('root'))
2つの配列、選択した値を持つすべての可能なチェックボックスで1と1を操作することにより、クラスCheckboxesField.js
import React from 'react'
import Checkbox from 'material-ui/Checkbox'
import MuiThemeProvider from 'material-ui/styles/MuiThemeProvider'
const CheckboxesField = props => {
const checkboxes = props.allPossibleCheckboxes.map(checkbox =>
<Checkbox style={{ width: '20%' }}
checked={props.checked.includes(checkbox)}
onCheck={props.onCheck}
key={checkbox}
label={checkbox}
id={checkbox}
iconStyle={{ fill: '#000' }} />)
return (
<MuiThemeProvider>
<div style={{ display: 'flex' }}>
{checkboxes}
</div>
</MuiThemeProvider>
)
}
export default CheckboxesField
とクラスに持って、我々は、単一のoncheckを使用することができます各チェックボックスに状態は必要ありません。
私がこれを望んでいた理由は、データベースからチェックフィールドを取得したいのです。このようにすれば、データベースに別のチェックボックスの可能性を追加するだけで、コードを変更する必要はありません。
オリジナル質問
私は材料のUIのチェックボックスのフィールドを作成しようとしています。
私は私が必要しかし、多くのチェックボックスのために
<div style={{ display: 'flex' }}>
<Checkbox style={{ width: '20%' }} checked={{ props.checkedOne }} onCheck={{ props.onCheckOne }} key={"one"} label={"one"} iconStyle={{ fill: '#000' }} />
<Checkbox style={{ width: '20%' }} checked={{ props.checkedTwo }} onCheck={{ props.onCheckTwo }} key={"two"} label={"two"} iconStyle={{ fill: '#000' }} />
.
.
.
</div>
を行うことができます知っています。しかし、これは迷惑になり、多くの執筆を伴います。したがって
私は、これはその後、
import React, { Component } from 'react'
import ReactDOM from 'react-dom'
import CheckboxesField from './CheckboxesField'
class App extends Component {
render() {
return (
<div className="App">
<CheckboxesField labelsList={["1", "2", "3", "4", "5"]} />
</div>
)
}
}
export default App
ReactDOM.render(<App />, document.getElementById('root'))
このApp.js
で呼び出されString
import React from 'react'
import Checkbox from 'material-ui/Checkbox'
import MuiThemeProvider from 'material-ui/styles/MuiThemeProvider'
const CheckboxesField = props => {
const checkboxes = props.labelsList.map(label => <Checkbox style={{ width: '20%' }} key={label} label={label} iconStyle={{ fill: '#000' }} />)
return (
<MuiThemeProvider>
<div style={{ display: 'flex' }}>
{checkboxes}
</div>
</MuiThemeProvider>
)
}
export default CheckboxesField
タイプのリストが含まれていlabelsList呼ば小道具、に基づいてチェックボックスをマップCheckboxesFieldsクラスを持っています最初の例とは異なり、小道具onCheck
とchecked
を渡すと、すべてのチェックボックスに適用されます。しかし、私は各チェックボックスを個別に制御したい。
どうすればいいですか?
ありがとうございました。
import React, { Component } from 'react'
import ReactDOM from 'react-dom'
import CheckboxesField from './CheckboxesField'
let myfunc1 =() => { console.log("Hello World!") };
let labelsList = [
{
onCheck: myfunc1,
checked: true,
label: '1',
},...
];
class App extends Component {
render() {
return (
<div className="App">
<CheckboxesField labels={labelsList} />
</div>
)
}
}
export default App
ReactDOM.render(<App />, document.getElementById('root'))
後のチェックボックスでの小道具にラベルだけでなく、コールバック関数だけではない
'labelsList =のようなオブジェクト内のデータを渡す{[{キー:1、点検:checkedOneを} .....]}' –
おかげでスリム!魅力的なように働いた:) – Cornelius