Reputation: 467
I have a component that needs to load a certain item according to a props it receives from the parent component.
const Contract = ({ savingsFactors, isContract }) => (
{isContract ? (
<PutField
label={label}
placeholder={placeholder}
onBlur={...}
items={savingsFactors === 'true' ? FORM_VALUES : FORM_VALUES_NORMAL}
/>
) : (
<PutField
label={label}
placeholder={placeholder}
onBlur={...}
items={savingsFactors === 'true' ? ANOTHER_FORM_VALUES : ANOTHER_FORM_VALUES_NORMAL}
/>
)}
);
The only thing that changes is the values inside the items.
These values are objects with arrays:
const FORM_VALUES = [
{ name: 'some name', value 'some value' },
{ name: 'some name', value 'some value' },
]
const FORM_VALUES_NORMAL = [
{ name: 'some name', value 'some value' },
{ name: 'some name', value 'some value' },
]
const ANOTHER_FORM_VALUES = [
{ name: 'some name', value 'some value' },
{ name: 'some name', value 'some value' },
]
const ANOTHER_FORM_VALUES_NORMAL = [
{ name: 'some name', value 'some value' }
]
Is there any way I don't need to repeat these two blocks of code?
Upvotes: 0
Views: 138
Reputation: 514
I always like to be as explicit as I can:
const Contract = ({ savingsFactors, isContract }) => {
const isSavingsFactors = savingsFactors === 'true';
const formValues = isSavingsFactors ? FORM_VALUES : FORM_VALUES_NORMAL;
const anotherFormValues = isSavingsFactors ? ANOTHER_FORM_VALUES : ANOTHER_FORM_VALUES_NORMAL;
const items = isContract ? formValues : anotherFormValues;
return <PutField
label={label}
placeholder={placeholder}
onBlur={...}
items={items}
/>
};
Upvotes: 1
Reputation: 2153
{
let itemsToUse = savingsFactors === 'true' ? FORM_VALUES : FORM_VALUES_NORMAL;
if (!isContract) {
itemsToUse = savingsFactors === 'true' ? ANOTHER_FORM_VALUES : ANOTHER_FORM_VALUES_NORMAL
}
return <PutField
label={label}
placeholder={placeholder}
onBlur={...}
items={itemsToUse}
/>
}
Upvotes: 1