问题描述
我刚刚找到了一个名为Robot的有限状态模块。它非常轻巧简单。我遇到一种我无法解决的情况,那就是在Robot内为API创建动态请求。我尝试过了
robot.js
const context = () => ({
data: [],});
export const authRobot = (request) =>
createMachine(
{
ready: state(transition(CLICK,'loading')),loading: invoke(
request,transition(
'done','success',reduce((ctx,evt) => ({ ...ctx,data: evt }))
),transition(
'error','error',ev) => ({ ...ctx,error: ev }))
)
),success: state(immediate('ready')),error: state(immediate('ready')),},context
);
我将它用在我的react组件中
// ...
export default function Login() {
const [current,send] = useMachine(authRobot(UserAPI.getData));
const { data } = current.context;
function handleSubmit(e) {
e.preventDefault();
send(CLICK);
}
useEffect(() => {
console.log(data);
console.log(current);
console.log(current.name);
},[data]);
// ...
单击按钮时出现问题,我的Web控制台记录了许多数据。似乎该事件多次调用。我在这里可以做什么?
解决方法
我认为这里的问题是x86
在通过另一台计算机时将触发重新渲染。由于您是在渲染函数中创建新机器,因此useMachine每次都会将其视为另一台机器。
我将在此闭包之外创建您的计算机。