从函数中反应 return jsx

react return jsx from function

从 Render 函数的 FilterBydescription 组件,我尝试 return jsx 元素。但是我没有定义 UseAdvertisementsFilters 中的 jsx。很可能上下文丢失了,但我不明白为什么。帮助 return 函数中的 jsx。

const FilterBydescription = () => {

    const [findByDescription, bindFindByDescription, resetFindByDescription] = useInput('')

    const Render = () => {
        return <FilterInput bind={bindFindByDescription} placeholder={"Find by description"} />;
    };

    return { Render };
}

export function UseAdvertisementsFilters({isLoading}){

    return(
        <aside className="col-xl-3 filter_detail">
            <Row className="filter_detail__wrapper">
                <Col xs={12}>
                    <Row>
                        <Col className={"filter_detail__search"} xs={12}>

                            {/* Get undefined */}
                            {FilterBydescription.Render}

                        </Col>
                    </Row>
                </Col>  
            </Row>
        </aside>
    )
}

你可以试试这个代码

const FilterBydescription = () => {
    
        const [findByDescription, bindFindByDescription, resetFindByDescription] = useInput('')
    
    
            return <FilterInput bind={bindFindByDescription} placeholder={"Find by description"} />;
    }
    
    export function UseAdvertisementsFilters({isLoading}){
    
        return(
            <aside className="col-xl-3 filter_detail">
                <Row className="filter_detail__wrapper">
                    <Col xs={12}>
                        <Row>
                            <Col className={"filter_detail__search"} xs={12}>
    
                                {/* Get undefined */}
                                <FilterBydescription />
    
                            </Col>
                        </Row>
                    </Col>  
                </Row>
            </aside>
        )
    }

您的问题是您正试图从 FilterBydescription 函数访问函数。正如您现在所拥有的,FilterBydescription 不是 React 组件。这是一个 returns 一个 Render 方法的函数,它呈现一个 React 组件。因此,当尝试从 FilterBydescription 访问 Render 属性 时,您将得到 undefined.

您可能想要做的是制作 FilterBydescription 组件并在 UseAdvertisementsFilters 组件中呈现该组件。

像这样:

const FilterByDescription = () => {
  const [
    findByDescription,
    bindFindByDescription,
    resetFindByDescription,
  ] = useInput('');

  return (
    <FilterInput
      bind={bindFindByDescription}
      placeholder={'Find by description'}
    />
  );
};

export function UseAdvertisementsFilters({ isLoading }) {
  return (
    <aside className="col-xl-3 filter_detail">
      <Row className="filter_detail__wrapper">
        <Col xs={12}>
          <Row>
            <Col className={'filter_detail__search'} xs={12}>
              <FilterByDescription />
            </Col>
          </Row>
        </Col>
      </Row>
    </aside>
  );
};