From ad371c20b6e2f874fef47369ffe60cb3751cd296 Mon Sep 17 00:00:00 2001
From: tanjinzhou <415800467@qq.com>
Date: Tue, 7 Jul 2020 13:57:11 +0800
Subject: [PATCH] fix: input & textarea autofocus
---
 antdv-demo                             |  2 +-
 breakChange-2.x.md                     |  2 ++
 components/_util/syncWatch.js          |  6 ++++++
 components/input/Input.jsx             | 12 ++++++------
 components/input/ResizableTextArea.jsx | 13 ++++++++-----
 components/input/TextArea.jsx          | 12 +++---------
 6 files changed, 26 insertions(+), 21 deletions(-)
 create mode 100644 components/_util/syncWatch.js
diff --git a/antdv-demo b/antdv-demo
index 44f59845e..dbe3af5b2 160000
--- a/antdv-demo
+++ b/antdv-demo
@@ -1 +1 @@
-Subproject commit 44f59845e9fa34578b79066f22fb14526f4ee7a6
+Subproject commit dbe3af5b20e6599a78a9a7fba7c13258b36646a7
diff --git a/breakChange-2.x.md b/breakChange-2.x.md
index fb1f95d85..07d352cbb 100644
--- a/breakChange-2.x.md
+++ b/breakChange-2.x.md
@@ -1,5 +1,7 @@
 # break change
 
+## global api
+
 ## Tag
 
 ### CheckableTag
diff --git a/components/_util/syncWatch.js b/components/_util/syncWatch.js
new file mode 100644
index 000000000..aa2e25438
--- /dev/null
+++ b/components/_util/syncWatch.js
@@ -0,0 +1,6 @@
+export default function syncWatch(fn) {
+  return {
+    handler: fn,
+    flush: 'sync',
+  };
+}
diff --git a/components/input/Input.jsx b/components/input/Input.jsx
index 8777d27b7..4370d6994 100644
--- a/components/input/Input.jsx
+++ b/components/input/Input.jsx
@@ -5,6 +5,7 @@ import inputProps from './inputProps';
 import { hasProp, getComponent, getOptionProps } from '../_util/props-util';
 import { ConfigConsumerProps } from '../config-provider';
 import ClearableLabeledInput from './ClearableLabeledInput';
+import syncWatch from '../_util/syncWatch';
 
 function noop() {}
 
@@ -68,15 +69,12 @@ export default {
     };
   },
   watch: {
-    value(val) {
+    value: syncWatch(function(val) {
       this.stateValue = val;
-    },
+    }),
   },
   mounted() {
     this.$nextTick(() => {
-      if (this.autoFocus) {
-        this.focus();
-      }
       this.clearPasswordValueAttribute();
     });
   },
@@ -142,7 +140,6 @@ export default {
         'size',
         'inputType',
         'className',
-        'autoFocus',
         'inputPrefixCls',
         'loading',
       ]);
@@ -164,6 +161,9 @@ export default {
       if (inputProps.maxLength === undefined) {
         delete inputProps.maxLength;
       }
+      if (!inputProps.autoFocus) {
+        delete inputProps.autoFocus;
+      }
       return ;
     },
     clearPasswordValueAttribute() {
diff --git a/components/input/ResizableTextArea.jsx b/components/input/ResizableTextArea.jsx
index 58756ba2f..a1634a1eb 100644
--- a/components/input/ResizableTextArea.jsx
+++ b/components/input/ResizableTextArea.jsx
@@ -136,12 +136,15 @@ const ResizableTextArea = {
         ...otherProps,
         style,
         class: cls,
-        directives: [
-          {
-            name: 'ant-input',
-          },
-        ],
+        // directives: [
+        //   {
+        //     name: 'ant-input',
+        //   },
+        // ],
       };
+      if (!textareaProps.autoFocus) {
+        delete textareaProps.autoFocus;
+      }
       return (
         
           
diff --git a/components/input/TextArea.jsx b/components/input/TextArea.jsx
index 229206dbf..e05662796 100644
--- a/components/input/TextArea.jsx
+++ b/components/input/TextArea.jsx
@@ -6,6 +6,7 @@ import { hasProp, getOptionProps } from '../_util/props-util';
 import { ConfigConsumerProps } from '../config-provider';
 import { fixControlledValue, resolveOnChange } from './Input';
 import PropTypes from '../_util/vue-types';
+import syncWatch from '../_util/syncWatch';
 
 const TextAreaProps = {
   ...inputProps,
@@ -32,16 +33,9 @@ export default {
   },
   computed: {},
   watch: {
-    value(val) {
+    value: syncWatch(function(val) {
       this.stateValue = val;
-    },
-  },
-  mounted() {
-    this.$nextTick(() => {
-      if (this.autoFocus) {
-        this.focus();
-      }
-    });
+    }),
   },
   methods: {
     setValue(value, callback) {