前端笔记

153 阅读1分钟

分组器项目

1、Checkbox.Group的坑

<Checkbox.Group value={checkedCodes} onChange={this.handleCheckGroupChange} style={{padding:'10px 0'}}>
                        {
                            allRule.map((item)=><Checkbox  
                                    key={item.codeValue}
                                    onChange ={(e)=>this.handleCheckboxChange(e,item)}
                                    value={item.codeValue}
                                >{item.codeName}</Checkbox>)
                        }
                    </Checkbox.Group>

Checkbox.Group标签上的value和onChange是控制选中与取消的,checkbox上的value是不变的值用来标识这个选项的值是什么,checkbok的onChange不控制选中或取消只是当这个选项在操作时要做什么,Checkbox.Group上的value和onChange是受控的体现,checkbox上的value和onChange与受控无关。

2、noStyle的理解

noStyle+表单控件设置宽度 ==Form.Item设置 inline-block+width == noStyle+ 行内表单控件(如checkbox不会像input那样占据一行的宽度)

加上noStyle. 校验提示不换行,不加的话说明这部分是一个独立的表单项分,跟前面或者后面的内容都没有关系;

<Form.Item>
        <Form.Item name="remember" noStyle>
          <Checkbox>Remember me</Checkbox>
        </Form.Item>

        <a className="login-form-forgot" href="">
          Forgot password
        </a>
      </Form.Item>

像上述着这种情况如果不加noStyle的话Forgot password就会在下一行。FormItem可以设置宽度

3、form表单 dependencies和shouldUpdate

shouldUpdate不能和name一起用,通常采用noStyle加Form.Item嵌套的形式使用;

<Form.Item
              label="方案2"
              noStyle
              shouldUpdate={(prevValues, currentValues) => prevValues.prgCode1 !== currentValues.prgCode1}
            >
              {({ getFieldValue }) => {
                return <Form.Item
                label="方案2"
                name="prgCode2"
              >
                <Select allowClear optionFilterProp="children" showSearch>
                  {
                    plan1List.filter(item => item.prgCode != getFieldValue("prgCode1")).map(item => <Select.Option value={item.prgCode}>{item.prgName}</Select.Option>)
                  }
                </Select>
                </Form.Item>
              }}
            </Form.Item>

dependencies和检验连用

<Form.Item
        name="confirm"
        label="Confirm Password"
        dependencies={['password']}
        hasFeedback
        rules={[
          {
            required: true,
            message: 'Please confirm your password!',
          },
          ({ getFieldValue }) => ({
            validator(rule, value) {
              if (!value || getFieldValue('password') === value) {
                return Promise.resolve();
              }

              return Promise.reject('The two passwords that you entered do not match!');
            },
          }),
        ]}
      >
        <Input.Password />
      </Form.Item>

shouldUpdate和renderProps连用

4、form.isFieldsTouchede

form.isFieldsTouched(true)在页面第一次渲染完后是true,要强制再渲染一次结果才是false