Am I 'allowed' to modify props in the constructor?

You cannot modify the props, not even in the constructor BUT you can modify a prop. Example:

constructor(props) {
  // This won't work. You will get "TypeError: Cannot add property aNewProp, object is not extensible" error.
  // props.aNewProp = 'someValue';
  // This won't work either. You will get "TypeError: Cannot assign to read only property 'anExistingProp' of object '#<Object>'" error.
  // props.anExistingProp = 'someValue';
  // However, this will work perfectly:
  props.anExistingProp.anExistingOrNewPropertyInThatProp = 'someValue';
  super(props);
}

render() {
  console.log('this.props are:');
  console.log(this.props);
  // The print-out includes the modifications that has been made to an existing prop.
}

To re-iterate what zerkms pointed out to me, the answer is no, you are not allowed to modify props, even in the constructor.

super() expects the exact same props that you were given, and even if you try to cheat the system by supplying something different, they will be overwritten immediately after the constructor. Ergo, you cannot modify this.props.

Even if you try to modify the props object to add an extra property, you will see an error like this:

TypeError: Can't add property bacon, object is not extensible

So you are literally unable the modify the props in the constructor, even if you wanted to.

However, you can set new [JavaScript] properties, e.g.

this.myReformattedProperty = format(props.oldProperty)