Good judgement is the result of experience ... Experience is the result of bad judgement. — Fred Brooks When writing user interfaces with the React framework, I often find that several of my components have similar behaviour. For example, I may have several components that display the eventual value of a promise, or display changing values of an Rx event stream, or are sources or targets for drag-