在Redux中使用useSelector和useDispatch
如何在redux中获取store数据。我们可以使用mapStateToProps的替代方法useSelector。我们还可以使用mapDispatchToProps的替代方法useuseppatch。
之前使用mapStateToProps和mapDispatchToProps的示例。
import update_person from './store/actions/personAction';
import { connect } from 'react-redux';
function App(props) {
return (
<div className="App">
<h1>Redux Tutorial</h1>
Person Name: {props.person.name}
<button onClick={props.updatePerson}>Update Person</button>
</div>
);
}
const mapStateToProps = state => {
return {
person: state.person
};
}
const mapDispatchToProps = dispatch => {
return {
updatePerson: () => {dispatch(update_person)}
}
}
export default connect(mapStateToProps,mapDispatchToProps)(App);
看起来,要同时使用mapStateToProps和mapDispatchToProps两者,我们需要做很多事情。但是,如果您使用useSelector和useDispatch,那么它将减少您的代码,并且看起来也更容易阅读。
现在使用useSelector和useDispatch的示例
import './App.css';
import fetch_user from './store/actions/userAction';
import { connect, useSelector, useDispatch} from 'react-redux';
import HookCounterSix from './components/HookCounterSix';
function App(props) {
const users = useSelector(state => state.users);
const dispatch = useDispatch();
return (
<div className="App">
<h1>Redux Tutorial</h1>
Users: <button onClick={()=>dispatch(fetch_user)}>Fetch Users</button>
{
users.length === 0 ? <p>No user found!</p> :
users.map(user => <p key={user.id}>{user.first_name}</p>)
}
<HookCounterSix/>
</div>
);
}
export default App;
我们看到使用useSelector和useDispatch而不是使用mapStateToProps和mapDispatchToProps的不同之处。
评论