【发布时间】:2019-08-14 18:46:43
【问题描述】:
现在我正在尝试使用 useReducer 创建管理状态和函数的新方法,但现在发现问题是“只能在函数组件的主体内部调用 Hooks” 有什么办法可以解决这个问题吗?
// App Component
import React from "react";
import { product, productDis } from "./ProductReducer";
//{product} is state, {productDis} is dispatch
import { total } from "./TotalReducer";
//{total} is state and i dont need {totalDis}
const App = () => {
return (
<div>
<button onClick={()=>productDis({type:'add',payload:'pen'})}>add</button>
{product} {total}
</div>
);
};
export default App;
// ProductReducer Component
import React, { useReducer } from 'react';
import {totalDis} from './TotalReducer'
//{totalDis} is dispatch and i dont need {total}
export const [product, productDis] = useReducer((state, action) => {
switch (action.type) {
case "add": {
const product_0 = 'pencil'
const product_1 = `${action.payload} and ${product_0}`
totalDis({
type:'total_add',
payload:'250'
})
return product_1;
}
default:
return state;
}
}, []);
// TotalReducer Component
import React, { useReducer } from 'react';
export const [total, totalDis] = useReducer((total, action) => {
switch (action.type) {
case "total_add": {
const vat = action.payload*1.15
return vat;
}
default:
return total;
}
}, 0)
当我点击显示屏上的按钮时,它应该会显示..." pen and pencil 287.5"
但它显示“只能在函数组件的主体内部调用挂钩”
有什么办法可以解决这个问题吗?还是我应该回归自然?
【问题讨论】:
-
你不能在函数组件之外使用
useReducer,但是你可以把reducer function and initial state outside of it if you prefer, like the example in the documentation. -
谢谢,但是如果我创建一个新组件,例如 Order 组件,并且在新组件中我想在没有 useContext 的情况下访问 ProductReducer,我可以导入 ProductReducer,它也可以为我的新组件返回状态
-
不,你不能按照你想要的方式做。
标签: javascript reactjs ecmascript-6 react-hooks