我已经检查了有关重新渲染的不同主题的先前答案,但找不到解决此问题的正确方法。在选择框上触发 onChange 事件后,我试图重新渲染组件。
我有一个包含 5 个用户的用户列表,我将它们分成了性别数组。所以我有一个男性数组和一个女性数组。我试图在 onChange 事件之后显示选定的性别用户列表。
我尝试在组件中使用“key”属性,但没有用。
这是我的 UserList 容器:
import React, { Component } from "react";
import ReactDOM from "react-dom";
import { connect } from 'react-redux';
import PropTypes from 'prop-types';
import List from '../components/List.jsx'
class UserList extends Component {
constructor(props) {
super(props);
}
renderUser = (toMap) => {
console.log(toMap);
return (
<List key = {toMap.length} users = {toMap}/>
);
}
renderSelect = () => {
return (
<select id="gender" onChange={this.handleChange}>
<option value="select">Select a gender</option>
<option value="males">Males</option>
<option value="females">Females</option>
</select>
);
}
handleChange = (e) => {
const {userList,males,females} = this.props;
const gender = e.target.value;
if(gender == 'males'){
return this.renderUser(males);
}else if(gender == 'females'){
return this.renderUser(females);
}
return this.renderUser(userList);
}
render() {
const {isLoading,error,userList} = this.props;
return (
<div>
{this.renderSelect()}
<ul>
{this.renderUser(userList)}
</ul>
</div>
);
}
}
export default connect(mapStateToProps)(UserList);
这是我的列表组件:
import React from 'react';
const List = ({users}) => (
<ul>
{users.map( (user,index) => (
<li key = {index} >{user.email}</li>
))}
</ul>
);
export default List;
当我在 handleChange 中检查控制台时,props(用户)正确传递,但不能完全获得视觉效果。