reactjs - 有没有办法从未知孩子的道具或状态变化中更新父母?
问题描述
让我们看看我们有一个父级,它可以有未知数量的未知组件的子级。在我的具体示例中,由于 dnd 列表顺序更改,我有一个具有绝对位置的下拉菜单。我有一个父母是这个 dnd 功能的提供者。我在父级上有一个 useEffect,它在每次更新时调用一个函数,它设置子级和父级的样式。这是它的样子:
const SortDrag = ({ children, onChange, onEnd }) => {
const sortDragContainer = useRef();
const setStyles = () => {
let top = 0;
const { children, style } = sortDragContainer.current;
[ ...children ].forEach(child => {
const { offsetHeight: height } = child;
child.style.transform = `translateY(${top}px)`;
top += height;
});
style.height = `${top}px`;
};
const Elements = children.map((child, i) => {
const { id } = child.props || child;
return (
<SortDragElement id={id} order={i} key={id}>
{child}
</SortDragElement>
);
}).sort((a, b) => a.order - b.order);
useEffect(() => {
if (onChange) sortDragContainer.current.onChange = onChange;
if (onEnd) sortDragContainer.current.onEnd = onEnd;
if (reverse) sortDragContainer.current.reverse = reverse;
}, []);
useEffect(() => { setStyles(); });
return (
<div
className="sort-drag-container"
ref={sortDragContainer}
>
{Elements}
</div>
);
};
export default SortDrag;
我在一个单独的文件中有事件监听器来处理 dnd 功能,但它与这个问题无关,只是不希望这引起混乱。
每当其中一个子组件发生更改时,我想更新父组件。
解决方案
推荐阅读
- go - 点击 50000 并行请求的 url
- android - 在所有 api 方法中使用通用 url 前缀?
- r - 如何更改 R 中随机森林的分割标准?
- reactjs - React-Native 总是在组件中调用 SwitchNavigator
- sql - 过滤掉 SQL Query 中的重复行
- vue.js - 从子组件 VueJs 添加元素的打开模式
- airflow - 如何在 Airflow 中手动触发来自未来的 dag?
- c# - override inherited event with generic type
- symfony4 - Creating controller-less route in Symfony
- python - 如何用其他元素替换列表的元素