【问题标题】:Convert react component into a funcitonal component with hooks将 react 组件转换为带有 h​​ooks 的功能组件
【发布时间】:2021-01-14 11:47:06
【问题描述】:

我正在尝试将React Component 重写为带有钩子的功能组件。 我试图重写的组件是在这里找到的:

https://github.com/SHISME/react-native-draggable-grid#usage

按照使用示例,组件按预期工作,但转换组件后,<DraggableGrid 行出现错误,提示:

Invariant Violation: [335,"RCTView",{"height":"<<NaN>>"}] is not usable as a native method argument

到目前为止我做了什么:

const DraggableTest = (props) => {
  const [items, setItems] = useState({
    data: [
      {name: '1', key: 'one'},
      {name: '2', key: 'two'},
      {name: '3', key: 'three'},
      {name: '4', key: 'four'},
      {name: '5', key: 'five'},
      {name: '6', key: 'six'},
      {name: '7', key: 'seven'},
      {name: '8', key: 'eight'},
      {name: '9', key: 'night'},
      {name: '0', key: 'zero'},
    ],
  });

  const render_item = (item: {name: string, key: string}) => {
    return (
      <View style={styles.item} key={item.key}>
        <Text style={styles.item_text}>{item.name}</Text>
      </View>
    );
  };

  return (
    <View 
      style={{height: 100}}
      style={{height: props.height}} // When trying parent nbr 2
      >
      <DraggableGrid
        style={{height: 200}}
        style={{height: props.height}} // When trying parent nbr 2
        height={200}
        numColumns={4}
        renderItem={render_item}
        data={items}
        onDragRelease={(data) => {
          setItems({data});
        }}
      />
    </View>
  );
};
export default DraggableTest;

我试过的父母:

<DraggableTest style={{height: 200}} />
<DraggableTest height={200} />

我也不完全确定如何处理接口(如果需要?)。

关于height 错误,我遗漏了什么? DraggableGrid 是否以某种方式试图从包装组件中获取 height 值?是否存在尚未(尚未?)启动的 height 值?

祝你有美好的一天! :)

【问题讨论】:

    标签: react-native react-hooks react-component


    【解决方案1】:

    您不能在组件中添加这样的样式。 您需要将其作为道具传递,如下所示:

    &lt;DraggableTest height={200} /&gt;

    并像这样添加:

    const DraggableTest = (props) => {
    
    ...
    
      return (
         <div style={{ height: props.height}} >
           //more code here
         </div>
      )
    }
    

    【讨论】:

    • 感谢您的快速回答,但将 height={200} 添加到 DraggableTest(或添加到 DraggableGrid)会产生相同的结果。将更新我的代码示例。
    • 您需要从&lt;DraggableTest style={{height: 200}} height={200} /&gt; 中删除style={{height: 200}}。我刚刚更新了我的答案以更清楚。
    • 啊,我明白了!不幸的是,它没有用。我尝试在ViewDraggableGrid 或两者上设置道具高度。更新了我的问题中的代码。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-06-22
    • 2021-05-29
    • 2021-06-13
    • 2020-10-27
    相关资源
    最近更新 更多