React-ace: Tidak bisa mendapatkan nilai harapan saat menggunakan pengiriman Redux

Dibuat pada 10 Jan 2016  ·  7Komentar  ·  Sumber: securingsincity/react-ace

Saat menggunakan fungsi dispatch dalam fungsi onChange , tidak akan mendapatkan nilai yang diharapkan.

this.editor.value adalah nol, jadi jangan dapatkan apa pun di sini.

Versi: 3.0.0

Berikut demonya:

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>
    );
  }
}

Komentar yang paling membantu

Dalam kasus saya, setel nilai status ke opsi value .

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>
);

Semua 7 komentar

Tidak bekerja dengan cara ini:

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

Dalam contoh pertama Anda

connect(
  mapDispatchToProps
)(Editor)

seharusnya

connect(
  null,
  mapDispatchToProps
)(Editor)

Dalam contoh kedua, Anda tidak memiliki implementasi fungsi mapStateToProps dan mapDispatchToProps.

@chentsulin

Tidak perlu 'mapDispatchToProps' dalam contoh kedua.

const mapStateToProps = (state) => {
  return {
    query: getQuery(state),
  }
};

Saya menghapus fungsi componentWillReceiveProps di https://github.com/securingsincity/react-ace/blob/master/src/ace.jsx , dan berfungsi.

Jika tidak, itu akan memanggil tindakan 'hapus' setelah panggilan 'masukkan' . Anda dapat menemukannya di console.log(nextProps) dalam fungsi componentWillReceiveProps .

Tentu, pengiriman akan diturunkan sebagai alat peraga sebagai default.

Saya tidak menangkap ini. Di mana tindakan delete dan insert ?

@chentsulin Saya menyalin ace.jsx ke proyek saya sendiri, dan console.log(nextProps) di ReactAce.componentWillReceiveProps.

apakah ada yang melihatnya?
ini masih menjadi masalah bagi saya

Dalam kasus saya, setel nilai status ke opsi value .

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>
);
Apakah halaman ini membantu?
0 / 5 - 0 peringkat

Masalah terkait

nenadlukic picture nenadlukic  ·  6Komentar

henviso picture henviso  ·  7Komentar

ghiden picture ghiden  ·  3Komentar

avalkowsky picture avalkowsky  ·  6Komentar

venil7 picture venil7  ·  3Komentar