The problem in your code is that in the updateMeta() function, the value is a string (which is whatever you typed or entered into the text field), so you can’t do the value.one or value.two.
So try this instead which uses a new parameter for the function, namely prop which is the current property in the metadata that’s being updated:
updateMeta( value, prop ) { // the 'prop' is the current property to be updated
let meta = select( 'core/editor' ).getEditedPostAttribute( 'meta' )._metakey;
// Make sure all props are defined. (and merge with current metadata values)
meta = {
one: '',
two: '',
...meta,
};
// Then update the current property.
meta[ prop ] = value;
dispatch( 'core/editor' ).editPost({ meta: { _metakey: meta } });
}
Then in the TextControl‘s onChange attribute:
-
Use
updateMeta( value, 'one' )for theField Onefield. -
Use
updateMeta( value, 'two' )for theField Twofield.
And you don’t have to use the exact same code I gave above, but it’s a working (tested) example. Happy coding! 🙂