Ich bin neu im Redux-Muster Ich habe Probleme beim Verknüpfen einer Aktion in einer separaten JS-Datei mit der übergeordneten Komponente. Hier ist die Komponente:Reagieren mit Redux - Aktion kann nicht an Eltern gebunden werden
import React, {Component} from 'react';
import {bindActionCreators} from 'redux';
import {connect} from 'react-redux';
import playSample from './sampleActions/clickToPlay';
class SamplesInnerLrg extends Component {
render() {
return <div>
{
this.props.samples.map((sample) => {
return (
<div key={sample.id} className="sample-comp-lge">
<div className="sample-comp-lge-header">
<span className="sample-comp-lge-Name">{sample.sampleName}</span>
<span className="sample-comp-lge-id">{sample.sampleFamily}</span>
</div>
<div className="sample-comp-lge-audio" ref={sample.id} onClick={() => this.bind.playSample(sample)}>
<audio preload="auto" id="myAudio">
<source src={sample.soundSource} type="audio/wav" />
</audio>
</div>
<div className="sample-comp-lge-owner">{sample.uploader}</div>
</div>
)
})
}
</div>
}
}
function mapStateToProps(state) {
return {
samples:state.samples
};
}
function matchDispatchToProps(dispatch) {
return bindActionCreators({playSample:playSample},dispatch)
}
export default connect(mapStateToProps,matchDispatchToProps)(SamplesInnerLrg);
Insbesondere Ich versuche, eine onClick Aktion auf dieser Linie zu haben, die eine Funktion in einer importierten Datei aufruft (clickToPlay.js):
<div className="sample-comp-lge-audio" ref={sample.id} onClick={() => this.bind.playSample(sample)}>
Die ClickToPlay Datei aussieht etwa so:
import $ from 'jquery';
export const playSample = (sample) => {
console.log(sample);
return {
type:"Play_Sample_clicked",
payload:sample
}
};
der Fehler i auf Klick bekommen habe, ist nicht Eigentum ‚playSample‘ undefinierter Kann lesen. Ich schätze, ich habe die Aktion korrekt an die Komponente gebunden, aber ich kann nicht sagen warum?
EDIT:
Hier ist meine index.js Datei wie gewünscht:
import React from 'react';
import ReactDOM from 'react-dom';
import App from './App';
import {Provider} from 'react-redux';
import { createStore,compose } from 'redux';
import allReducers from './reducers';
const store = createStore(allReducers,compose(
window.devToolsExtension ? window.devToolsExtension() : f => f
));
ReactDOM.render(
<Provider store={store}>
<App />
</Provider>
,
document.getElementById('root')
);
danke, aber immer noch wirft den gleichen Fehler auf click.Ich glaube, Export const playSample ist nur eine schnellere Möglichkeit, zu exportieren, wenn es nur einen Export in der Datei gibt. Danke für den Hinweis zu ES6, der es erlaubt, den Schlüssel zu eliminieren! –
Ich sehe @DannyDyer. Meine Antwort aktualisiert – Kafo
Ich probierte das tatsächlich vor ein paar Minuten und habe diesen Fehler: this2.props.playSample ist keine Funktion –