Wenn Sie die Funktion dispatch
Funktion onChange
verwenden, wird nicht der erwartete Wert angezeigt.
this.editor.value
ist null, also hier nichts.
Version: 3.0.0
Hier ist die Demo:
import React from 'react';
import { bindActionCreators } from 'redux';
import { connect } from 'react-redux';
import brace from 'brace';
import AceEditor from 'react-ace';
import 'brace/mode/sql';
import 'brace/mode/python';
import 'brace/theme/github';
// ActionCreators
export function onChangeAction(value) {
// use `console.log(value)` will not get the right expect value, an input print a letter.
return {
type: 'ON_CHANGE',
text: value,
}
};
// Editor Component
class Editor extends React.Component {
constructor(props) {
super(props);
};
render() {
const { onChange } = this.props;
return (
<AceEditor
mode="sql"
theme="github"
onChange={onChange}
name="UNIQUE_ID_OF_DIV"
width='100%'
ref='editor'
fontSize={15}
editorProps={{$blockScrolling: true}}
/>
);
}
}
function mapDispatchToProps(dispatch) {
return {onChange: bindActionCreators(onChangeAction, dispatch)};
};
connect(
mapDispatchToProps
)(Editor)
// App
import { Provider } from 'react-redux';
class App extends React.Component {
render() {
const { store } = this.props;
return (
<Provider store={store}>
<Editor />
</Provider>
);
}
}
Funktioniert so nicht:
import React from 'react';
import { bindActionCreators } from 'redux';
import { connect } from 'react-redux';
import brace from 'brace';
import AceEditor from 'react-ace';
import 'brace/mode/sql';
import 'brace/mode/python';
import 'brace/theme/github';
// `onChangeAction` from ActionCreators
export function onChangeAction(text) {
return {
type: 'ON_CHANGE',
statement: text,
}
};
class Editor extends React.Component {
constructor(props) {
super(props);
};
onChange = (value) => {
console.log(value);
const { dispatch } = this.props;
dispatch(onChangeAction(value));
};
render() {
return (
<AceEditor
mode="sql"
theme="github"
onChange={this.onChange}
name="UNIQUE_ID_OF_DIV"
width='100%'
ref='editor'
fontSize={15}
editorProps={{$blockScrolling: true}}
/>
);
}
}
connect(
mapStateToProps,
mapDispatchToProps
)(Editor)
class App extends React.Component {
render() {
const { store } = this.props;
return (
<Provider store={store}>
<Editor />
</Provider>
);
}
}
@Yuanye
In deinem ersten Beispiel
connect(
mapDispatchToProps
)(Editor)
sollte sein
connect(
null,
mapDispatchToProps
)(Editor)
In Ihrem zweiten Beispiel haben Sie keine Implementierung der Funktion mapStateToProps und mapDispatchToProps.
@chentsulin
Benötigt 'mapDispatchToProps' im zweiten Beispiel nicht.
const mapStateToProps = (state) => {
return {
query: getQuery(state),
}
};
Ich lösche die componentWillReceiveProps
Funktion in https://github.com/securingsincity/react-ace/blob/master/src/ace.jsx
und es funktioniert.
Wenn dies nicht der Fall ist, wird nach dem Aufruf von 'insert' die Aktion 'delete' aufgerufen. Sie finden es unter console.log(nextProps) in der Funktion componentWillReceiveProps
.
Natürlich wird der Versand standardmäßig als Requisite weitergegeben.
Ich versteh das nicht. Wo sind die Aktionen delete
und insert
?
@chentsulin Ich habe ace.jsx
in mein eigenes Projekt kopiert und console.log(nextProps) in ReactAce.componentWillReceiveProps.
schaut sich das jemand an?
Das ist immer noch ein Thema für mich
Setzen Sie in meinem Fall den value
Option
const TextArea = (props) => (
<div className={styles.box}>
<AceEditor
mode="javascript"
theme="solarized_light"
onChange={props.onChange}
name="RIGHT_INPUT"
width="100%"
height="100%"
value={props.value}
showPrintMargin={false}
editorProps={{ $blockScrolling: true }}
/>
</div>
);
Hilfreichster Kommentar
Setzen Sie in meinem Fall den
value
Option