I have a Table component that I want ref to be attached to.
Use: Table.js
class Table extends React.Component { constructor(props) { super(props); this.state = { rows: 1, dataLength: props.dataLength, } this.tableRef = React.createRef(); } componentDidUpdate() { //using ref this.tableRef.current ..... //logic using ref this.state.rows ..... //some logic } render() { <TableContainer ref={this.tableRef} /> <CustomPagination /> } } This works fine, but now my requirement has changed, and I want to reuse the Table component with pagination applied to all the Tables in my App. I have decided to make a HOC withCustomPagination.
Use: withCustomPagination.js HOC
import CustomPagination from 'path/to/file'; const withCustomPagination = tableRef => Component => { return class WithCustomPagination extends React.Component { constructor(props) { super(props); this.state = { rows: 1, dataLength: props.dataLength, } } componentDidUpdate() { tableRef.current.state ..... //logic using ref, Error for this line this.state.rows ..... //some logic } render() { return ( <Component {...state} /> <CustomPagination /> ) } } } export default withCustomPagination; New Table.js:
import withCustomPagination from '/path/to/file'; const ref = React.createRef(); const Table = props => ( <TableContainer ref={ref} /> ); const WrappedTable = withCustomPagination(ref)(Table); HOC withCustomPagination returns a class WithCustomPagination that has a componentDidUpdate lifecycle method that uses Table ref in the logic. So I try to pass ref created in Table.js as argument to withCustomPagination, i.e curried with ref and Table stateless component.
This use of ref is wrong and I get error: TypeError: Cannot read property 'state' of null.
I tried using Forwarding Refs, but was unable to implement it.
How do I pass the Table ref to withCustomPagination and be able to use it in HOC?