当前位置: 首页 > 知识库问答 >
问题:

如何从textfield材料UI中设置的值设置处于状态的对象

公良安邦
2023-03-14

我努力寻找答案,但失败了。请帮帮我.

首先,一个工作实例

this.state = {
module:'',
description: '',
status: '',
redirectToModule: false,
error: ''
}
-----------------
  handleChange = name => event => {
    this.setState({[name]: event.target.value})
  }

 Render section has        
 <TextField id="name" label="Module Name" className={classes.textField} value={this.state.module} onChange={this.handleChange('module')} margin="normal"/><br/>
      <TextField id="description" type="text" label="Description" className={classes.textField} value={this.state.description} onChange={this.handleChange('description')} margin="normal"/><br/>
      <TextField id="status" type="text" label="Status" className={classes.textField} value={this.state.status} onChange={this.handleChange('status')} margin="normal"/>
this.state = {
  module: {
      module: '',
      description: '',
      status: ''
    },
  redirectToModule: false,
  error: ''
}

例如,我想我应该在onchange={this.handlechange('')}中提到'module.status'而不是'module',但是

我应该改变函数handleChange吗?

This.SetState({module.[name]:event.target.value});

正确的方法应该是什么?

请帮帮我.我是一个新的反应,但我在短时间内掌握了很多。坦率地说,我还是个新手。

整个文件如下…没有导入和样式部分

class EditModule extends Component {
  constructor({match}) {
    super();
    // this.state = {
    //       module: '',
    //       description: '',
    //       status: '',
    //       roles:[],
    //   redirectToModule: false,
    //   error: ''
    // }
    this.state = {
      module: {
        module: '',
        description: '',
        status: '',
        roles:[]
      },
      redirectToModule: false,
      error: ''
    }
    this.match = match
  }

  componentDidMount = () => {
    read({
      moduleId: this.match.params.moduleId
    }).then((data) => {
      if (data.error) {
        this.setState({error: data.error});
      } else {
        this.setState({ 
          module: {
            module: data.module, 
            description: data.description,
            status: data.status,
            roles: data.roles
          }
        });
      }
    })
  };

  clickSubmit = () => {
    const module = {
      module: this.state.module || undefined,
      description: this.state.description || undefined,
      status: this.state.status || undefined,
      roles: this.state.roles || undefined
    }
    update({moduleId: this.match.params.moduleId}, module)
      .then((data) => {
        if (data.error) {
          this.setState({error: data.error})
        } else {
          this.setState({'moduleId': data._id, 'redirectToModule': true});
        }
      }
    );
  };

  handleChange = name => event => {
    this.setState( { module: JSON.stringify( { [name]: event.target.value } )  } )
  };

  render() {
    const {classes} = this.props
    if (this.state.redirectToModule) {
      return (<Redirect to={'/module/' + this.state.moduleId}/>)
    }
    return (
      <Card className={classes.card}>
        <CardContent>
          <Typography type="headline" component="h2" className={classes.title}>
            Edit Module
          </Typography>
          <TextField id="name" label="Module Name" className={classes.textField} value={this.state.module.module} onChange={this.handleChange('module')} margin="normal"/><br/>
          <TextField id="description" type="text" label="Description" className={classes.textField} value={this.state.module.description} onChange={this.handleChange('description')} margin="normal"/><br/>
          <TextField id="status" type="text" label="Status" className={classes.textField} value={this.state.module.status} onChange={this.handleChange('status')} margin="normal"/>
          <br/> {
            this.state.error && (<Typography component="p" color="error">
              <Icon color="error" className={classes.error}>error</Icon>
              {this.state.error}
            </Typography>)
          }
        </CardContent>
        <CardActions>
          <Button color="primary" variant="raised" onClick={this.clickSubmit} className={classes.submit}>Submit</Button>
        </CardActions>
      </Card>
    )
  }
}

EditModule.propTypes = {
  classes: PropTypes.object.isRequired
}

export default withStyles(styles)(EditModule)

共有1个答案

卫博雅
2023-03-14

@Avinash

请像这样更改您的handleChange功能

handleChange = name => event => {
    this.setState({module[name]: event.target.value})
}
 类似资料:
  • 对于我正在使用的插件,我必须具有如下状态: 如何在不设置其余访问权限的情况下设置hospital_id状态? 这似乎删除了一切,但hospital_id:

  • 问题内容: 用语言很难解释这种情况,让我举一个例子: 如何在JavaScript对象中设置具有变量值的变量属性? 问题答案: 那应该工作。您混合了变量的名称及其值。但是用字符串索引对象以获取其属性可以在JavaScript中很好地工作。

  • 如何使用材质设计将按钮放置在图中所示的位置? 这是index.html模板上的代码。 这是材质设计的css样式。 Lorem ipsum dolor sit amet,consectetur adipisicing elit,sed do eusmod tempor incidunt ut labore et dolore magna aliqua.Ut enim ad minim veniam,

  • 我想测试一个组件,它包含条件渲染。因此,如果一个状态为true,那么JSX-HTML应该呈现,如果不是false的话。 如果我想使用Jest、Enyzme、React测试库来测试这一点,我应该如何继续? 我有一个组件,它的实现细节对这个主题并不重要。请注意,它包含 对于我的测试,我想把它设置为真。

  • 我想知道是否有一种方法可以使用useState()更新React中的嵌套对象状态

  • 问题内容: 对于我正在使用的插件,我必须具有如下所示的状态: 我如何在不设置其余访问权限的情况下设置hospital_id的状态? 这似乎删除了除了hospital_id之外的所有内容: 问题答案: 您有几种选择: 借助ECMA6,您可以使用对象传播建议()创建具有更新属性的对象的副本。 您可以在对象()上使用本机分配功能 或为最短的版本和原子更新: 还有一个选项是更新插件: 我建议使用第一个。