如何將Redux與React Hooks一起使用

在本文中,讓我們一起來學習如何將Redux與React Hooks一起使用。


React Redux在2019年6月11日發佈的7.1版中提供了對Hooks的支持。這意味著您可以在函數組件中將Redux與Hooks一起使用,而不是使用高階組件(HOC)。


什麼是Hook?

Hook是在React版本16.8中引入的,可以讓我們訪問函數組件中的狀態和生命週期方法。


讓我們看一個例子。


一個像這樣的React類組件:

<code>class Count extends React.Component {
state = {
count: 0
}

add = () => {
this.setState({ count: this.state.count + 1 })
}

render() {
return (


Count: {this.state.count}


<button>Add/<button>

);
}
}/<code>


可以使用如下Hooks編寫為函數組件:

<code>const Count = () => {
const [count, setCount] = useState(0)

return (


Count: {count}


<button> setCount(count + 1)}>Add/<button>

);
};/<code>


如果您想進一步瞭解Hooks,建議您閱讀有關Hooks的詳細文檔。


回到正題

本文的原始目的是介紹如何將Redux與Hooks結合使用。


React Redux現在提供了useSelectoruseDispatch Hook,可以使用它們代替

connect


useSelector是連接mapStateToProps的替代方法。向其傳遞了一個函數,該函數使用Redux的存儲狀態並返回所需的狀態。


useDispatch替換connect的mapDispatchToProps。它所做的只是返回store的dispatch方法,因此我們可以手動調用dispatch。


理論已經夠多了,讓我們看一個實際示例。在該示例中,我們將使用connect的React組件轉換為使用Hooks的組件。


使用connect:

<code>import React from "react";
import { connect } from "react-redux";
import { addCount } from "./store/counter/actions";

export const Count = ({ count, addCount }) => {
return (
<>

Count: {count}

<button>Count/<button>
>
);
};

const mapStateToProps = state => ({

count: state.counter.count
});

const mapDispatchToProps = { addCount };

export default connect(mapStateToProps, mapDispatchToProps)(Count);/<code>


現在,使用新的React Redux Hooks代替connect:

<code>import React from "react";
import { useDispatch, useSelector } from "react-redux";
import { addCount } from "./store/counter/actions";

export const Count = () => {
const count = useSelector(state => state.counter.count);
const dispatch = useDispatch();

return (
<>

Count: {count}

<button> dispatch(addCount())}>
Count
/<button>
>
);
};/<code>


如您所見,代碼是精簡的,更少的代碼通常意味著更好的性能。它更易於閱讀,易於理解,當然也更易於測試。


不使用高階組件的另一個好處是不再產生多餘的"虛擬DOM包裝":



現在,我們已經瞭解和學習了Hooks的基礎知識,以及如何將它們與Redux一起使用。編程愉快!