用過 slate 編輯器的都知道它對於中文輸入有如下兼容性問題:javascript
GitBook 使用的也是 slate 編輯器,但它對 slate 底層作了不少修改,解決了這些問題。在我對比 gitbook/slate 與 slate 時,沒有找到解決方案。java
後來,我在 slate 的 issue 裏查找該問題,找到了一些不錯的回答。react
環境:slate 0.47.1 slate-react 0.22.1git
參考 pull request 。找到相關源代碼,修改便可。github
按照上述代碼修改以後,發現光標問題解決了,且 safari 瀏覽器下也有了一些小變化:輸入法能正常工做了,可是最後的輸入內容不會輸入到 瀏覽器內。chrome
參考 issue 。最後面用戶 hudk114 的評論裏有提到,須要在 onCompositionEnd 時,根據是否須要插入數據(HAS_INPUT_EVENTS_LEVEL_2 爲真時),調用 edit.insertText 插入數據。瀏覽器
這樣寫就行:編輯器
const isSynthetic = !!event.nativeEvent if (isSynthetic && HAS_INPUT_EVENTS_LEVEL_2){ editor.insertText(event.data); }
修改了這兩處以後,輸入中文的問題便可解決。code