【问题标题】:ReactJS checkbox default valueReactJS 复选框默认值
【发布时间】:2019-03-11 18:49:38
【问题描述】:

我在将复选框设置为在加载时选中以始终由使用 ReactJS 的用户选中时遇到问题。我对反应还很陌生,现在我正在为这种事情苦苦挣扎。

我的代码是这样的

import DbCheckbox2 from 'modules/Checkbox-Checked'

const GenerateTemplateComponent = ({
  handleSubmit,
  handleCancel,
  classes
}) => {
  return (
    <Form
      onSubmit={handleSubmit}
      validate={validate}
      render={({ handleSubmit, invalid, pristine, form: { change } }) => (
        <form className={classes.form} onSubmit={handleSubmit}>
          <PanelBody>
            <Grid container>
              <Grid item xs={12} md={12}>
                <Field
                  name='name'
                  component={DbInputField}
                  required
                  label={<FormattedMessage id='offre-name' />}
                />
              </Grid>
              <Grid container>
                <Grid item xs={6} md={6}>
                  <Field
                    //className={classes.inputCheckbox}
                    name='section'
                    component={DbCheckbox2}
                    type='checkbox'
                    color='primary'
                    label={<FormattedMessage id='offre-section' />}  
                  />
                </Grid>

Checkbox-Checked文件是这样的

import React from 'react'

import FormControl from '@material-ui/core/FormControl'
import FormControlLabel from '@material-ui/core/FormControlLabel'
import Checkbox from '@material-ui/core/Checkbox'

const DbCheckbox2 = ({
  label,
  className,
  checked=true,
  value=true,
}) => (
  <FormControl className={className} component="fieldset">
    <FormControlLabel
      control={
        <Checkbox
          checked={checked}
          value={value}
        />
      }
      label={label}
    />
  </FormControl>
)

export default DbCheckbox2

我尝试在字段属性上添加 value="true",并在 html 上得到一个 value="true",但是当我再次单击时,它确实让我得到了我想要的结果在复选框上,就像它第一次无法识别一样。也许他在等待 onclick 事件之类的,但我根本不明白。有什么帮助吗?

【问题讨论】:

  • 你在应用程序的哪里设置初始状态,我想你只需要在状态中设置checked: true并作为道具传递给DbCheckbox2
  • 差不多了,用初始值解决,来回答问题。谢谢

标签: reactjs checkbox


【解决方案1】:

这将向您展示如何处理复选框中的选中状态:

class App extends React.Component {
  constructor(props) {
    super(props);
    this.state = { checkbox1: true };
    this.handleChange = this.handleChange.bind(this);
  }
  
  handleChange(e) {
      const element = e.target;
      this.setState({
          [element.name]: element.checked
      });
  }
  
  render() {
    return (
        <input
         type="checkbox"
          name='checkbox1'
          checked={this.state.checkbox1}
          onChange={ this.handleChange }/>
      )
  }
}

ReactDOM.render( < App / > ,
  document.getElementById('root')
);
<script src="https://unpkg.com/react@16/umd/react.development.js" crossorigin></script>
<script src="https://unpkg.com/react-dom@16/umd/react-dom.development.js" crossorigin></script>
<div id="root" />

【讨论】:

  • 这项工作,但不完全是我想做的。我的代码正在检查这些框,但没有将值设置为 true(不知道为什么)。解决了下面的问题。感谢您的帮助
【解决方案2】:

使用表单上的 initialValues 解决,使复选框值在加载时为真,如下所示:

<Form
  initialValues={{
    section: true,
    menus: true
  }}

接着,该字段的名称用于传递 true 值。

【讨论】:

  • 我不确定这是否是设置初始值的标准方法。您是否参加过鼓励这样做的公会?
  • 我也不确定,但我正在做一个已经在进行的项目。他们将 initialValues 属性用于另一种形式,我只是相处哈哈。但对我,一个初学者程序员来说,它看起来像是一种使用 react 文档中不受控制的组件的方法,但我真的不确定。
  • 我怀疑这是正确的方法。更合适的方法是将它们作为道具传递并验证道具类型或使用 componentDidMount 设置初始状态。
猜你喜欢
  • 2015-11-17
  • 2012-10-06
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-12-20
  • 2015-03-24
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多