本身開發與第三方module都出現一個問題,Grid的column排序點擊三次後會出現重複record,頭兩次會加載,第三次直接出現結果,因此能夠判斷是加載cache數據時出現問題。html
vendor/magento/module-ui/view/base/web/js/grid/data-storage.js
grid數據提取後會加到cache中,但只會保存一個id數據,而且默認id名是entity_id,因此使用的id不是entity_id則須要在ui component xml中額外指定,但大多數開發者會忽略這一點。web
參考如下數據源設置,cms的數據ID不是entity_id而是page_id,通常primaryFieldName節點不會設置錯,但storageConfig節點不設置不會出現明顯問題。ide
<!-- vendor/magento/module-cms/view/adminhtml/ui_component/cms_page_listing.xml --> <dataSource name="cms_page_listing_data_source"> <argument name="dataProvider" xsi:type="configurableObject"> <argument name="class" xsi:type="string">Magento\Cms\Ui\Component\DataProvider</argument> <argument name="name" xsi:type="string">cms_page_listing_data_source</argument> <argument name="primaryFieldName" xsi:type="string">page_id</argument> <argument name="requestFieldName" xsi:type="string">id</argument> <argument name="data" xsi:type="array"> <item name="config" xsi:type="array"> <item name="component" xsi:type="string">Magento_Ui/js/grid/provider</item> <item name="update_url" xsi:type="url" path="mui/index/render"/> <!-- 若是漏掉這段,會出現上述問題 --> <item name="storageConfig" xsi:type="array"> <item name="indexField" xsi:type="string">page_id</item> </item> </item> </argument> </argument> </dataSource>