【发布时间】:2018-03-29 15:29:10
【问题描述】:
所以我有这些来自服务器的数据:
const userInfo = getUserInfo(); //Returns: <span class="info">His name is Sam</span><span class="info">He is 20 years old</span><span class="info">He is from Spain</span><span class="info">He is fluent in English</span>
然后,有两个反应组件。第一个 ListInfo 显示所有用户信息,如果将第二个组件 ShowMore 添加到页面,则 ListInfo 应该只显示前两条信息。
class ListInfo extends React.Component {
render() {
return (
const info = this.props.info;
<div className="ListInfo">
{info}
<ShowMore items={info} />
</div>
);
}
}
class ShowMore extends React.Component {
constructor(props) {
super(props);
this.state = {
isDisplayingAll: true
};
this.handleDisplaying = this.handleDisplaying.bind(this);
}
componentDidMount() {
this.setState({
isDisplayingAll: false
});
}
handleDisplaying(e) {
}
render() {
return (
<button onClick={this.handleDisplaying}>
{this.state.isDisplayingAll ? 'Less' : 'More'}
</button>
);
}
}
ReactDOM.render(
<ListInfo info={userInfo} />,
document.getElementById('root')
);
那么问题来了:
首先,react 文档说,如果要渲染列表项,则应该添加一个 key 属性,并且来自服务器的信息是一个列表。那么我怎样才能给他们添加一个密钥呢?我的意思是,我必须编写一些代码来为每个项目添加一个键吗?
其次,我不应该更改组件获取的props,那么我应该如何更改DOM元素(最后两个)的样式?
第三,具有class 而不是className 的元素会在渲染中产生问题吗?
【问题讨论】:
-
我从未见过使用
class代替className会导致问题,但基本原理是class 是JS 中的保留关键字(其中JSX 是扩展)。你会收到一个丑陋的警告
标签: javascript reactjs