CSS属性选择器
下面是一个属性选择器的示例,选择具有属性title
且其值为"Sports"
的元素
1 | const elements = document.querySelectorAll('[title="Sports"]'); |
JS中如何交换两个变量?
可以使用ES6的解构赋值来交换变量的值。
1 | let a = 1; |
React中如何使用条件渲染
所谓条件渲染是指满足某个条件时才渲染某个组件。比如当用户登录后,可以渲染用户的个人信息页面,否则渲染登录页面。
1 | {isLoggedIn ? <Home /> : <Login />} |
Ant Design中Form.Item的valuePropName属性
通常来说,Ant Design中的控件,比如Input
、Select
等,其值都是通过value
属性来控制的,但是有一些控件没有value
属性,比如Switch
、Checkbox
等。这时就需要使用valuePropName
属性来指定控件的值属性。否则提交的时候无法取得对应的控件值。
看下面的代码,这是一个简单的登录框,包含用户名、密码、记住我和提交按钮,你会发现,无论记住我是否选中,当点击提交按钮时,打印的结果中的remember
都是false
。
1 | const Login: React.FC = () => { |
原因就是Checkbox
不是使用value
来记录它的值,它使用的是checked
(html底层如此,详情看这里)
解决办法,只需要给Form.Item添加valuePropName="checked"
属性即可,代码如下,这时我们再点击提交按钮,打印的结果中remember
的值就会根据复选框的选中状态而变化了。
1 | <Form.Item name="remember" valuePropName="checked" noStyle> |
还有哪些控件需要使用valuePropName
属性呢?比如Rate
、Slider
等控件也需要使用valuePropName
来指定值属性。
Switch
Rate
Slider
Transfer
Form.Item的工作原理
使用Ant Design中的Form.Item包裹组件,且在Form.Item中指定name属性后,Form.Item会自动将组件的值和Form进行绑定。也就是说,组件的值会自动同步到Form中,Form的值也会自动同步到组件中。
不能使用组件的
onChange
收集value,应该使用Form级别的onValuesChange
来收集表单的值变化。不能使用
defaultValue
属性来设置初始值,应该使用initialValues
属性来设置。不能在Form.Item中直接使用
value
属性来设置组件的值,应该使用form.setFieldsValue
来设置组件的值。使用
htmlType='submit'
的按钮来提交表单,点击此按钮会触发表单的onFinish
事件。onFinish
函数中的values
参数会接收到表单的所有值。
Form.Item如何寻找内部控件
本以为Form.Item
会自动寻找第一个子元素作为控件。但是第三个列子说明不是这样的。
这样不可以,username
的值始终是undefined
。
1 | <Form.Item name="username"> |
这样可以:
1 | <Form.Item name="username"> |
这样也可以
1 | <Form.Item name="username"> |