Я могу иметь разные значения в разных состояниях в xstate
У меня есть много кода, как это:
export const getNodeShapeSize = ({
scaleToFit,
compress,
expanded
}: {
scaleToFit: boolean;
compress: boolean;
expanded: boolean;
}): number => {
if (scaleToFit) {
return ShapeSizes.full;
}
if (compress && !expanded) {
return ShapeSizes.preview;
}
return ShapeSizes.expanded;
};
Мне было интересно, смогу ли я очистить это с помощью xstate? Я мог бы иметь 3 состояния
scaleToFit
compressed
expnded
Пока у меня есть это:
export const treeMachineConfig = Machine({
strict: true,
id: 'treefsm',
initial: TreeSFMActionTypes.Unkonwn,
states: {
unknown: {
on: {
scaleToFit: 'scaledToFit',
compress: 'compressed',
expand: 'expanded'
}
},
scaledToFit: {
on: {
compress: 'compressed',
expand: 'expanded'
}
},
compressed: {
on: {
scaleToFit: 'scaledToFit',
expand: 'expanded'
}
},
expanded: {
on: {
scaleToFit: 'scaledToFit',
compress: 'compressed'
}
}
}
});
Но где будут лежать ценности? Буду ли я поместить их в контекст?
0 ответов
Да, вы бы вставили их context
(документы), и это будет выглядеть так:
import { Machine, assign } from 'xstate';
export const treeMachineConfig = Machine({
strict: true,
id: 'treefsm',
context: {
width: 0,
height: 0
},
initial: TreeSFMActionTypes.Unkonwn,
states: {
// ...
compressed: {
// Just an example: set to this size whenever 'compressed' state is entered
entry: assign({ x: 10, y: 10 }),
on: // ...
},
expanded: {
entry: assign({ /* ... */ }),
on: // ...
}
}
});