Вы можете просто передать замененную строку в качестве значения для input
:
<input
value={this.state.value.replace('.', ',')}
onChange={e => this.setState({value: e.target.value})} ... />
И просто изменить свой шаблон, чтобы использовать запятую вместо точки.
pattern="^([0-9]*[,])?[0-9]*$"