REACT - defaultChecked 在第二次加载时不呈现检查属性

Mik*_*tin 7 radio-button reactjs react-router

当我第二次访问 /view/:id 时,我的组件不会检查收音机。我开始在我的列表组件中,在站点的索引处使用react-router,我单击一个元素的视图按钮,检查单选按钮,我返回列表并转到另一个或相同的元素,它不再被检查。当我在 React 开发工具中检查组件时,无线电具有 defaultChecked=true 属性。

import React from 'react';
import { connect } from 'react-redux';

class LicenseRadios extends React.Component {
  buildRadios() {
    let { licenses, activeValue } = this.props;

    return licenses.map(license => {
      let checked = false;

      if(activeValue !== undefined && activeValue === license.id){
        checked = true;
      }

      return (
        <div key={license.id} className="col l2">
          <p>
            <input name="license" type="radio" id={'licenseRdo_' + license.id} value={license.id} defaultChecked={checked} />
            <label htmlFor={'licenseRdo_' + license.id}>{license.label}</label>
          </p>
        </div>
      );
    });
  }

  render() {
    return (
      <div className="row">
        {this.buildRadios()}
      </div>
    );
  }
}

export default LicenseRadios;
Run Code Online (Sandbox Code Playgroud)

我尝试更改该defaultChecked属性checked,但它需要 onChange 事件。我不明白这个问题。有人可以帮我吗?

谢谢

Eri*_*ric 5

defaultChecked道具仅在初始渲染期间使用。如果需要在后续渲染中更新值,则需要使用函数onChange来处理值更改。

查看文档中的受控组件,以更好地了解您遇到的问题。

  • 这并没有回答在组件重新渲染时如何预先检查无线电的问题。在这种情况下不会触发“onChange”操作 (2认同)

小智 5

使用“未定义”作为初始值并通过将其设置为或defaultChecked重新渲染truefalse

const Example = () => {

  [checked,setChecked] = useState(undefined);
  
  useEffect(()=>{
  
    // fetch data
    
    setChecked(true);
  
  });
  
  return (
    <input type="checkbox" defaultChecked={checked} onClick={(e)=> changeValue(e)}/>
  );

}
Run Code Online (Sandbox Code Playgroud)