【发布时间】:2017-03-21 11:39:27
【问题描述】:
我有一组这样生成的表单输入:
有关完整组件,请参阅下面的更新 2。
因此,如果有三列,则该组中的三列将显示在表单中。我正在尝试从这些输入中提取数据,但我只需要 id。如何从TextField 中提取列 ID?
另外,我需要获取每个组的数据(即 ID),以便它们出现在数组中:
transformations: [{columnId: 1, ruleId: 4}, {columnId: 2, ruleId: 2}, {columnId:3 , ruleId: 1}]
这些只是示例值,正如我提到的主要问题是我不确定如何从第一个输入中提取 columnId 的值。我也在努力获取多组数据。
对于这个问题的任何帮助将不胜感激。
感谢您的宝贵时间。
更新:
handleRuleChange 看起来像这样:
handleRuleChange = (e, index, value) => {
this.setState({
ruleId: value
})
}
更新 2:
这是组件:
import React from 'react'
import Relay from 'react-relay'
import { browserHistory } from 'react-router'
import SelectField from 'material-ui/SelectField'
import MenuItem from 'material-ui/MenuItem'
import TextField from 'material-ui/TextField'
import CreateTransformationSetMutation from '../mutations/CreateTransformationSetMutation'
class CreateTransformationSetDialog extends React.Component {
componentWillMount() {
this.props.setOnDialog({
onSubmit: this.onSubmit,
title: 'Create and Apply Transformation Set'
})
}
initial_state = {
targetTableName: '',
ruleId: 'UnVsZTo1',
}
state = this.initial_state
onSubmit = () => {
const onSuccess = (response) => {
console.log(response)
browserHistory.push('/table')
}
const onFailure = () => {}
Relay.Store.commitUpdate(
new CreateTransformationSetMutation(
{
viewer: this.props.viewer,
version: this.props.viewer.version,
targetTableName: this.state.targetTableName,
transformations: ///this is where I need to get the values///,
}
),
{ onSuccess: onSuccess }
)
}
handleTextChange = (e) => {
this.setState({
targetTableName: e.target.value
})
}
handleRuleChange = (e, index, value) => {
this.setState({
ruleId: value
})
}
render() {
return (
<div>
<TextField
floatingLabelText="Table Name"
value={this.state.targetTableName}
onChange={this.handleTextChange}
/>
<br />
{
this.props.viewer.version.columns.edges.map((edge) => edge.node).map((column) =>
<div key={column.id}>
<TextField
id={column.id}
floatingLabelText="Column"
value={column.name}
disabled={true}
style={{ margin: 12 }}
/>
<SelectField
floatingLabelText="Select a Rule"
value={this.state.ruleId}
onChange={this.handleRuleChange}
style={{ margin: 12 }}
>
{
this.props.viewer.allRules.edges.map(edge => edge.node).map(rule =>
<MenuItem
key={rule.id}
value={rule.id}
primaryText={rule.name}
/>
)
}
</SelectField>
</div>
)
}
</div>
)
}
}
export default Relay.createContainer(CreateTransformationSetDialog, {
fragments: {
viewer: () => Relay.QL`
fragment on Viewer {
${CreateTransformationSetMutation.getFragment('viewer')}
version(id: $modalEntityId) @include(if: $modalShow) {
${CreateTransformationSetMutation.getFragment('version')}
id
name
columns(first: 100) {
edges {
node {
id
name
}
}
}
}
allRules(first: 100) {
edges {
node {
id
name
}
}
}
}
`
},
initialVariables: {
modalEntityId: '',
modalName: '',
modalShow: true,
},
prepareVariables: ({ modalEntityId, modalName }) => {
return {
modalEntityId,
modalName,
modalShow: modalName === 'createTransformationSet'
}
}
})
它正在使用Relay,但这与问题无关,只需将输入中的数据提取到转换数组中。
【问题讨论】:
-
你能展示你的
handleRuleChange方法吗? -
如果你不删除之前的问题会很棒;-)
-
你的
initial state呢?最好在这里添加完整的组件。不确定你在那里做什么? -
对不起,那是我的错!对代码进行了一些重写,所以这个问题对我来说不再重要了。但我同意你的看法,我删除它是一种糟糕的形式!
-
@JyothiBabuAraja 更新了问题
标签: forms reactjs material-ui