Javascript 当其值为true时,我需要将复选框设置为enabled

Javascript 当其值为true时,我需要将复选框设置为enabled,javascript,reactjs,Javascript,Reactjs,我需要设置如下:如果复选框的值为真,则复选框显示选中如果值为假复选框被选中,但其值从后端变为真,我将值存储在状态规则中,但它未被启用,如果值变为真,则我无法选中和取消选中复选框when value is true复选框not check when value it's true为什么会发生不确定我也在尝试设置onChange,但对如何设置onChange感到困惑 来自后端的值 NameMatch: true Match: true 搜索表单组件 export default function

我需要设置如下:如果复选框的值为真,则复选框显示选中如果值为假复选框被选中,但其值从后端变为真,我将值存储在状态规则中,但它未被启用,如果值变为真,则我无法选中和取消选中复选框when value is true复选框not check when value it's true为什么会发生不确定我也在尝试设置onChange,但对如何设置onChange感到困惑

来自后端的值

NameMatch: true
Match: true
搜索表单组件

export default function SearchForm() {

const { setRules, rules, fetchSearch } = useRule();
const [changeRuleSettings, setChangeRuleSettings] = React.useState(false);
React.useEffect(() => {
    fetchSearchRule();
  }, []);

const handleCheckBoxChange = (e) => {
    setRules((prevRules) => ({
      ...prevRules,
      [e.target.name]: !prevState[e.target.checked],
    }));
  };

 return (
 <Grid item xs={4}>
          <Box className={classes.formText}>
            <Checkbox
              style={style}
              name="NameMatch"
              checked={rules.NameMatch}
              color="primary"
              onChange={handleCheckBoxChange}
            />
            <Typography variant="subtitle2" noWrap={true}>
              Match
            </Typography>
          </Box>
        </Grid>
        
)
}
导出默认函数SearchForm(){
const{setRules,rules,fetchSearch}=useRule();
常量[changeRuleSettings,setChangeRuleSettings]=React.useState(false);
React.useffect(()=>{
fetchSearchRule();
}, []);
常量handleCheckBoxChange=(e)=>{
setRules((prevRules)=>({
…遵守规则,
[e.target.name]:!prevState[e.target.checked],
}));
};
返回(
匹配
)
}

如果我正确理解了这个问题,您会问onChange函数应该做什么。因此,基本上您需要切换复选框所依赖的属性的值。例如,如果后端返回:

exactNameMatch: true
partialNameMatch: true
然后,对于第一个复选框,单击时,exactNameMatch的值应设置为false。示例实现如下所示:

onChange={(e) => setRules((prevRules) => ({...prevRules, exactNameMatch: !prevRules.exactNameMatch}))}
对于第二个复选框,onChange将是相同的,只是有一点小的区别,即您将使用partialNameMatch而不是exactNameMatch

另一种可能是实现handleCheckBoxChange功能,如下所示:

  const handleCheckBoxChange = (e) => {
          setRules((prevRules) => ({...prevRules, [e.target.name]: !prevRules[e.target.name]}))
}

其中,e.target.name分别为exactNameMatchpartialNameMatch,基于传递给复选框组件的名称属性的值。希望我能正确理解你的问题,并能真正帮助你

如何在
规则
状态中存储值?再次检查代码我更新了@mirajwhat我需要在prevState中设置的内容意味着我可以看到您正在调用prevState,但您在其中存储的内容Getting error setRules不是一个函数,你已经将useState导入到组件中了吗?是的,实际上我在其他组件中设置了我的api,并导入链接这个常量{setRules,rules,initiateRules,fetchSearchRule}=useRule();显示更多的代码,因为我很难理解到底是什么情况。