2
我正在創建一個組件,我想更新this.props.children
的className prop。反應:更新this.props.children的className
要完成此操作,我使用了React.Children
實用程序。 React.Children.map(children)
從子女創建一個新陣列並React.cloneElement(child)
來操縱子項道具。
在某些方面map
和cloneElement
工作。我可以添加props
並更改各個元素的children
。但props.className
不會傳播到孩子的class
呈現時。也就是說,我在新的子數組中看到props.className
的更新,但渲染的子項不包含新的props.className
。
這是更新props.className
爲this.props.children
不正確的方法是什麼?如果是這樣,那麼正確的方法是什麼?
class List extends React.Component {
constructor(props) {
super(props);
this.items = React.Children.map(this.props.children, item => {
const className = `${item.props.className} test`;
const props = { ...item.props, className: className };
return React.cloneElement(item, props, "TEST");
});
}
render() {
console.log(this.items);
return (
<ul>
{this.items}
</ul>
);
}
}
class ListItem extends React.Component {
render() {
return (
<li className="item">
{this.props.children}
</li>
);
}
}
class Application extends React.Component {
render() {
return (
<List>
<ListItem ref="item1" className="item">A</ListItem>
<ListItem ref="item2" className="item">B</ListItem>
<ListItem ref="item3" className="item">C</ListItem>
<ListItem ref="item4" className="item">D</ListItem>
</List>
);
}
}
/*
* Render the above component into the div#app
*/
ReactDOM.render(<Application />, document.getElementById("app"));
<script src="https://cdnjs.cloudflare.com/ajax/libs/react/15.4.0/react.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/react/15.4.0/react-dom.min.js"></script>
<div id="app"></app>
哇,感謝您抽出我很容易地指出哪些應該甲肝這是一個明顯的錯誤。 –
@BrettDeWoody有時,我們解決了最難的問題,只是因爲我們過度想象而錯過了簡單的問題^^ –