Π£ ΠΌΠ΅Π½Ρ ΡΠ΅ΠΉΡΠ°Ρ Π°Π½Π°Π»ΠΎΠ³ΠΈΡΠ½Π°Ρ ΠΏΡΠΎΠ±Π»Π΅ΠΌΠ° Ρ https://github.com/securingsincity/react-ace/issues/120 .
Π― ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΡ react-ace Π²Π½ΡΡΡΠΈ redux-form ΠΊΠ°ΠΊ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ, ΠΏΠ΅ΡΠ΅Π΄Π°Π½Π½ΡΠΉ Π² Field.
ΠΠ°ΠΆΠ΄ΡΠΉ ΡΠ°Π·, ΠΊΠΎΠ³Π΄Π° ΡΠ΅Π΄Π°ΠΊΡΠΎΡ ΠΊΠΎΠ΄Π° ΡΠ΅ΡΡΠ΅Ρ ΡΠΎΠΊΡΡ, ΡΡΡΠ°Π½Π°Π²Π»ΠΈΠ²Π°Π΅ΡΡΡ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ "", ΠΈ Π²Π½ΡΡΡΠΈ ΡΠ΅Π΄Π°ΠΊΡΠΎΡΠ° ace ΠΎΡΠΎΠ±ΡΠ°ΠΆΠ°ΡΡΡΡ Π΄Π²Π΅ ΡΠΎΡΠΊΠΈ.
ΠΠΎΠΉ ΠΊΠΎΠ΄ ΠΏΠΎΡ ΠΎΠΆ Π½Π° jschlieber Π² ΠΈΡΡ ΠΎΠ΄Π½ΠΎΠΌ ΠΏΡΠ΅Π΄Π»ΠΎΠΆΠ΅Π½ΠΈΠΈ, ΠΏΠΎΡΠΌΠΎΡΡΠΈΡΠ΅:
import React from 'react'
import AceEditor from 'react-ace'
import _ from 'lodash';
import 'brace/mode/javascript';
import 'brace/theme/monokai';
export default function ReduxAce (props) {
console.log(props.input.onBlur, props);
const {
input,
theme = 'monokai',
mode = 'javascript',
fontSize = 14,
tabSize = 2,
width = '1000px',
height = '500px',
...custom
} = props;
return (
<AceEditor
theme={theme}
mode={mode}
fontSize={fontSize}
tabSize={tabSize}
width={width}
height={height}
onBlur={() => props.input.onBlur(props.input.value)}
editorProps={{$blockScrolling: Infinity}}
{...input}
{...custom}
/>
)
}
Π° ΡΠ°ΠΊΠΆΠ΅
import React, { Component } from 'react';
import { connect } from 'react-redux';
import { saveDraft } from '../actions/index';
import { bindActionCreators } from 'redux';
import { Field, reduxForm } from 'redux-form';
import ReduxAce from '../components/redux_ace'
const ID = 'id123', NAME = 'name123', SOME_CODE = 'code123';
function mapStateToProps({draft}) {
return {
draft
};
}
function mapDispatchToProps(dispatch) {
return bindActionCreators({
saveDraft
}, dispatch)
}
class Draft extends Component {
renderField(field) {
return (
<div className="form-group">
<label>{field.label}</label>
<input
className="form-control"
type="text"
{...field.input}
/>
</div>
)
}
onSubmit(values) {
console.log('sub',values);
this.props.saveDraft({
id: values[ID],
name: values[NAME],
code: values[SOME_CODE]
});
}
render() {
const { handleSubmit } = this.props;
return (
<form onSubmit={handleSubmit(this.onSubmit.bind(this))}>
<Field
label="Id"
name={ID}
component={this.renderField}
/>
<Field
label="Name"
name={NAME}
component={this.renderField}
/>
<Field
label="Lambda code"
name={SOME_CODE}
component={ReduxAce}
/>
// if I put it here, then it suddenly works fine <ReduxAce/>
<button type="submit" className="btn btn-primary"> Submit</button>
</form>
);
}
}
export default reduxForm({
validate,
form: 'DraftForm'
})(
connect(mapStateToProps, mapDispatchToProps)(Draft)
)
ΠΏΡΡΠΌΠΎ ΠΏΠ΅ΡΠ΅Π΄ ΠΊΠ½ΠΎΠΏΠΊΠΎΠΉ Ρ ΠΏΠΎΡΡΠ°Π²ΠΈΠ» ΠΊΠΎΠΌΠΌΠ΅Π½ΡΠ°ΡΠΈΠΉ // if I put it here, then it suddenly works fine <ReduxAce/>
- ΡΠ°ΠΊ ΡΡΠΎ Π΄Π°, Π΅ΡΠ»ΠΈ Ρ ΠΏΠΎΡΡΠ°Π²Π»Ρ Ace Editor ΠΊΠ°ΠΊ Π½Π΅ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ ΠΏΠΎΠ»Ρ, ΡΠΎ Π΅Π³ΠΎ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ Π½Π΅ Π±ΡΠ΄Π΅Ρ ΡΠ΄Π°Π»Π΅Π½ΠΎ. ΠΠ°ΠΊ Π²ΠΈΠ΄ΠΈΡΠ΅, Ρ ΠΏΡΡΠ°Π»ΡΡ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ ΠΎΠ±ΡΠ°Π±ΠΎΡΡΠΈΠΊ onBlur ΠΈ ΡΠΎΡ
ΡΠ°Π½ΠΈΡΡ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅, Π½ΠΎ Π½Π΅ ΡΠΌΠΎΠ³.
Π‘ΠΏΠ°ΡΠΈΠ±ΠΎ Π·Π° Π»ΡΠ±ΡΠ΅ ΠΏΠΎΠ΄ΡΠΊΠ°Π·ΠΊΠΈ!
Π£ ΠΌΠ΅Π½Ρ ΡΠ°ΠΊΠ°Ρ ΠΆΠ΅ ΠΏΡΠΎΠ±Π»Π΅ΠΌΠ°. Π― Π½Π΅ Π²ΠΈΠΆΡ ΠΏΡΠΎΠ±Π»Π΅ΠΌΡ Ρ Π²Π΅ΡΡΠΈΠ΅ΠΉ 5.1.1
, Π½ΠΎ Π² 5.8.0
ΡΡΠΎ ΠΏΡΠΎΠ±Π»Π΅ΠΌΠ°. ΠΡΠ΄Ρ ΠΎΠ±Π½ΠΎΠ²Π»ΡΡΡ, Π΅ΡΠ»ΠΈ ΡΠΌΠΎΠ³Ρ ΡΠ°Π·ΠΎΠ±ΡΠ°ΡΡΡΡ.
const aceOnBlur = (onBlur) => (_event, editor?) => {
const value = editor.getValue();
onBlur(value);
};
...
return (
<AceEditor
className={className}
mode='html'
theme='monokai'
enableBasicAutocompletion={true}
showPrintMargin={false}
tabSize={4}
setOptions={options}
width='1000px'
name={input.name}
onBlur={aceOnBlur(input.onBlur)}
onChange={input.onChange}
onFocus={input.onFocus}
value={input.value}
/>
)
Ρ ΠΌΠ΅Π½Ρ ΠΎΡΠ»ΠΈΡΠ½ΠΎ ΡΠ°Π±ΠΎΡΠ°Π΅Ρ
@drewen @spoonscen - ΠΊΠΎΠ³ΠΎ- Π½ΠΈΠ±ΡΠ΄Ρ ΠΈΠ· Π²Π°Ρ ΠΏΡΠ΅Π΄Π»ΠΎΠΆΠ΅Π½ΠΈΡ ΠΏΠΎ ΡΡΠΎΠΌΡ
@avalkowsky - ΡΠ°Π±ΠΎΡΠ°Π΅Ρ Π»ΠΈ ΠΏΡΠ΅Π΄Π»ΠΎΠΆΠ΅Π½ΠΈΠ΅
@drewen Π― ΡΠ°ΡΡΠΊΠ°ΠΆΡ Π²Π°ΠΌ ΠΏΠΎΠ΄ΡΠΎΠ±Π½ΠΎΡΡΠΈ Π·Π°Π²ΡΡΠ°!
@JFFby ΠΈΠ·Π²ΠΈΠ½ΠΈΡΠ΅, ΡΡΠΎ ΡΡΠΎ Π·Π°Π½ΡΠ»ΠΎ ΡΠ°ΠΊ ΠΌΠ½ΠΎΠ³ΠΎ Π²ΡΠ΅ΠΌΠ΅Π½ΠΈ, ΠΏΠΎΠ·ΠΎΡ ΠΌΠ½Π΅.
ΠΠ°ΡΠ΅ ΡΠ΅ΡΠ΅Π½ΠΈΠ΅ ΡΠ°Π±ΠΎΡΠ°Π΅Ρ!
@drewen ΡΠΏΠ°ΡΠΈΠ±ΠΎ, Ρ ΡΡΠΎ ΠΏΡΠΎΠΏΡΡΡΠΈΠ» π
@ taylordowns2000
Π― ΡΠ°ΠΊΠΆΠ΅ ΠΏΠΎΠ½ΠΈΠ·ΠΈΠ» Π²Π΅ΡΡΠΈΡ react-ace Π΄ΠΎ 5.1.1 ΠΈ ΠΏΠΎΠΏΡΠΎΠ±ΠΎΠ²Π°Π» Π±Π΅Π· ΠΎΠ±ΡΠ°ΡΠ½ΠΎΠ³ΠΎ Π²ΡΠ·ΠΎΠ²Π° onBlur, Π½ΠΎ ΡΡΠΎ Π½Π΅ ΡΡΠ°Π±ΠΎΡΠ°Π»ΠΎ.
ΠΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ, Ρ ΡΠΎΠ²Π΅ΡΡΠΈΠ» Π΅ΡΠ΅ ΠΎΠ΄Π½Ρ ΠΎΡΠΈΠ±ΠΊΡ, Π½ΠΎ Π΅ΡΠ»ΠΈ Π±Ρ Ρ Π±ΡΠ» ΡΠ°Π·ΡΠ°Π±ΠΎΡΡΠΈΠΊΠΎΠΌ ΠΈΠ· Π±ΡΠ΄ΡΡΠ΅Π³ΠΎ, ΡΡΠΎΠ»ΠΊΠ½ΡΠ²ΡΠΈΠΌΡΡ Ρ ΡΡΠΎΠΉ ΠΏΡΠΎΠ±Π»Π΅ΠΌΠΎΠΉ, Ρ Π±Ρ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π» ΡΠ΅ΡΠ΅Π½ΠΈΠ΅ JFFbys :)
ΠΡΠ΅ΠΌ ΡΠΏΠ°ΡΠΈΠ±ΠΎ Π·Π° ΠΏΠΎΠΌΠΎΡΡ!
Π‘Π°ΠΌΡΠΉ ΠΏΠΎΠ»Π΅Π·Π½ΡΠΉ ΠΊΠΎΠΌΠΌΠ΅Π½ΡΠ°ΡΠΈΠΉ
Ρ ΠΌΠ΅Π½Ρ ΠΎΡΠ»ΠΈΡΠ½ΠΎ ΡΠ°Π±ΠΎΡΠ°Π΅Ρ