【问题标题】:Component Re-Render generating issue组件重新渲染生成问题
【发布时间】:2020-05-16 09:34:03
【问题描述】:

我是ReactReact Native 的新手。我为我的React Native 应用程序使用了无类组件。例如,我有主屏幕,主屏幕有 10 个即将发生的事件。所以我使用Flatlistreact-reduxredux 显示所有事件。现在问题是所有加入的事件都是real time 使用sokcte.io。我还设置了倒计时。当有人加入任何事件时,我会发出该套接字并更新实时加入。没有问题,当我使用 redux 更新特定事件数据时,反应原生重新渲染主屏幕组件,因此 CountDown 也会重新渲染,它看起来像卡住 CountDown 然后重新开始。

请问您能帮忙吗?

这是我的屏幕

const EventScreen = (props) => {

    console.log('Event Screen Rendered')

    const [isLoading,setIsLoading] = useState(true);

    const navigation = props.navigation;
    const dispatchEvents = useDispatch();

    const SOCKET_URL = 'http://192.168.43.142:8080/';


    const Events = useSelector(state => state.EventReducer.Events);

    const _connectSocket = useCallback(() => {

        var socket = io.connect(SOCKET_URL, { forceNode: true });

        socket.on('EventProcess',(d) => {
            dispatchEvents(EventAction.onEventOver(d));
            dispatchEvents(EventAction.onEventOverChangeActiveEvent(d));
        });


        // New  Joining
        socket.on('EventJoined',(Event) => {
            dispatchEvents(EventAction.onEventJoined(Event))
        })

    },[]);


    useEffect(() => {
        setIsLoading(true);
        dispatchEvents(EventAction.fetchEvents())
        .then( () => {
            setIsLoading(false);
        })
        .catch( () => {
            setIsLoading(false);
        })
        _connectSocket();
    }, []);

    return <View>

        <FlatList
            data={Events}
            renderItem={(event) => <EventCard event={event.item} navigation={navigation} />}
            keyExtractor={event => event._id}
        />

    </View>

}

【问题讨论】:

    标签: reactjs react-native redux react-redux


    【解决方案1】:

    将 extraData 属性添加到您的 FlatList 组件中,例如:

     extraData={Events}
    

    【讨论】:

      猜你喜欢
      • 2022-10-21
      • 2021-08-20
      • 2020-07-24
      • 2020-12-22
      • 1970-01-01
      • 2011-06-03
      • 2020-08-06
      • 2018-08-12
      • 2019-06-01
      相关资源
      最近更新 更多