1
我需要將所有React組件解析爲它們各自的React元素(例如,type = div,ul,li),包括可能存在的所有嵌套組件。我已經成功地做到了;不過,我收到了關於直接調用React組件的警告。另外,我很可能會首先解決錯誤。如何將嵌套的React組件解析爲元素樹?
function resolveNestedDomElements(reactElement) {
// is there a better way to check if it's a component?
if (React.isValidElement(reactElement) && _.isFunction(reactElement.type)) {
// is there a better way to access a component's children?
reactElement = reactElement.type(reactElement.props);
// Warning: Something is calling a React component directly. Use a
// factory or JSX instead. See https://fb.me/react-legacyfactory
// Note: Unfortunately, the factory solution doesn't work.
}
if (!React.isValidElement(reactElement)) {
return reactElement;
}
let { children } = reactElement.props;
if (React.Children.count(children)) {
if (React.isValidElement(children)) {
children = resolveNestedDomElements(children);
} else {
children = React.Children.map(
children,
resolveNestedDomElements
);
}
}
return React.cloneElement(reactElement, reactElement.props, children);
}
我不知道我明白你在這裏做什麼;這個問題可能是[XY問題](http://meta.stackexchange.com/questions/66377/what-is-the-xy-problem)。但警告是因爲你調用'.type'作爲一個函數,而不是調用'React.createElement(type,...)' –
@BinaryMuse,但是'React.createElement(type,...)'不實際上讓孩子們接觸到這個組件,這正是我所需要的。它們是隱藏的,只能在函數調用中訪問。如果您有更好的方法,可能只需解決此問題。 – jedmao
你有沒有想過這個?我試圖爲我正在編寫的序列化反應組件的庫... reactElement.type(reactElement.props)顯示警告,但不會爲我返回值。 :( –