我正在尝试使用react-spring的useSprings
使用户能够以FieldArray
格式对商品进行重新排序。 useSprings可拖动列表演示(found here)使用useRef
管理项目的顺序。 FieldArray
带有许多用于插入,移除和移动项目的数组帮助器功能。
我遇到的问题是:
1)使用formik的move
数组帮助器方法对现有项目进行重新排序可以成功更改数组顺序,但是需要额外单击以呈现正确的顺序
2)使用数组帮助器方法添加或删除数组项会产生意外的结果。更改ref的长度不会更改order.current
内useGesture
的长度
我还尝试使用useState
代替useRef
,并在道具更改时用useEffect
更新状态。
这是我创建的代码沙箱:https://codesandbox.io/s/usesprings-with-fieldarray-56bex
在bind
函数中,注释掉
order.current = newOrder;并取消注释
// arrayHelpers.move(currIndex, currRow);会显示我上面提到的问题#1。
我希望能够使用带有响应弹簧的formik的move
,insert
和remove
帮助函数,以无缝地重新排序,添加和删除{ {1}}。
答案 0 :(得分:1)
也许您可以在添加新元素后尝试设置新的order.current
onClick={() =>{
arrayHelpers.insert(items.length, {
name: `Item ${items.length + 1}`
})
order.current = [...order.current, order.current.length];
}
}
这会将新项目添加到列表的末尾。
答案 1 :(得分:0)
我至少遇到了您的#1问题。
请注意,setSprings
函数不会自行重新呈现任何内容,并且useSprings
缺少要自动更新的dependencies
数组。
react-springs@9.0.0.beta-23
有一个依赖项数组,并且与链接到here的沙盒中的useSpringsFixed
包装器一起,应强制渲染更改后的道具。
希望也能解决您的问题。