Lo siento por el pseudocódigo. Piensa que el problema se puede entender así. Trabajando en un ejemplo reproducible.
Considere el siguiente pseudocódigo:
Foo de clase:
let fooInstance = null class Foo() { constructor(){ fooInstance = this; this.fooCallback = null // property to assign callback } static getInstance() { return fooInstance } callbackExecutor() { if (this.fooCallback) // callback always null here even the assignment is ok in the component this.fooCallback(); } }Componente React-Redux:
import { argumentFunc } from 'src/argumentFunc' class MyComponent extends Component { constructor(props) { ... } componentDidUpdate(prevProps, prevState) { const foo = Foo.getInstance() if (whateverCond) { // callback assignment to instance. this.props.argumentFunc() works if called here foo.fooCallback = this.props.argumentFunc(); } } } ... const mapDispatchToProps = (dispatch) => ({ argumentFunc: () => dispatch(argumentFunc()), }) export default connect(mapStateToProps, mapDispatchToProps)(MyComponent) Asigno la devolución de llamada a la instancia, pero luego en callbackExecutor , this.fooCallback es nulo.
Lo intenté:
foo = this.props.argumentFunc();
foo = this.props.argumentFunc;
foo = () => this.props.argumentFunc();
foo = () => this.props.argumentFunc;
¿Cómo puedo pasar una devolución de llamada a la instancia ( fooInstance ) para que se llame más tarde dentro de los métodos de instancia de clase ( callbackExecutor() )?
Has probado:
foo.getInstance().fooCallback = this.props.argumentFunc.bind(this)