小编Ara*_*ash的帖子

如何为 Facebook Messenger 等聊天应用实现 React 无限滚动组件?

我知道关于这个主题有很多问题(React 无限滚动),我的问题旨在更深入地确定当前可用的最佳解决方案来实现这样的组件。

我正在开发一个聊天应用程序,我创建了一个类似于 Facebook Messenger 聊天窗口的组件,您可以在桌面浏览器上看到它。

Facebook:

在此处输入图片说明

我的(到目前为止):

在此处输入图片说明 在此处输入图片说明

实现无限加载的无限滚动结果是很棘手的。从用户体验的角度来看,我需要始终至少满足以下属性:

  1. 每行消息的高度应该实时动态计算,因为我不知道消息的高度,因为它们没有固定的高度;
  2. 每当用户键入新消息时,滚动条必须自动到达可滚动组件的底部,直到最后发送的消息。可滚动组件本身具有顶部和底部填充(或者我也可以使用边距),以便在聊天的顶部和第一条消息以及底部和最后一条消息之间留出一些空间(看上面的图片);
  3. 聊天在一个弹出元素中,该元素以淡入动画打开,用户可以在使用页面时关闭和打开它;

现在,为了做到这一点,我已经尝试了几个库:

  • react-infinite:我的第一次尝试,放弃了,因为它需要提前知道所有元素的高度;
  • react-list:我发现它真的很强大,问题是如果我关闭弹出窗口并在有时它丢失一些已经呈现的消息后重新打开它,在我看来这可能是react-list组件的错误。此外,该组件不允许我向上显示滚动底部(参见https://github.com/coderiety/react-list/issues/50);
  • 反应虚拟化:很强大,但我发现它非常棘手使用ListInfiniteLoader一起AutoSizerCellMeasurerCellMeasurerCache。此外,当我发送消息时,如果我调用List.scrollToIndex(lastIndex)自动将容器滚动到底部,滚动不会完全到达底部,因为可滚动容器具有顶部和底部填充。我无法使用此组件获得令人满意的结果。
  • react-infinite-any-height:我想试一试,但目前它似乎还没有被移植到 React 16 如果我安装它 NPM 警告我关于 React 15 的不满意的对等依赖性,但我使用反应 16。

所以我的问题更像是一种相互对抗的方式:你们中的某个人是否曾经需要根据我上面写的 3 个要求来实现一个 React 聊天组件?你用的什么库?由于 Facebook Messenger 处理得很好并且他们使用 React,你们中有人知道他们是如何实现这样的组件的吗?如果我检查 Facebook 聊天窗口的聊天消息,它似乎将所有已呈现的消息保留在 DOM 中。但是,如果是这样,这不会影响性能吗?

所以我现在的问题多于答案。我真的很想找到一个适合我需要的组件。另一种选择是实现我自己的。

javascript chat reactjs

9
推荐指数
1
解决办法
3435
查看次数

SQL Server:尝试在存储过程中创建视图

我正在尝试在存储过程中创建视图,但是遇到错误。

我的代码是:

    alter PROCEDURE p.Azmoon1 
    AS
    begin
       EXEC ('IF OBJECT_ID (''r.r_Sales01_Requests__Duplicates'', ''V'') IS NOT NULL
            DROP VIEW r.r_Sales01_Requests__Duplicates ;
            go
            create view r.r_Sales01_Requests__Duplicates ( 
             CompanyID
            ,Branch
            ,Year
            ,VoucherType,VoucherNumber
            ,Date_Persian
            ,Row
        ) as
        select 
             CompanyID
            ,Branch
            ,Year
            ,VoucherType,VoucherNumber
            ,Date_Persian
            ,Row
        from t_SalesRequests
        group by CompanyID,Branch,Year,VoucherType,VoucherNumber,Date_Persian,Row
        having count(*)>1

        go

    ')
    end
Run Code Online (Sandbox Code Playgroud)

当我像下面这样调用程序时:

execute p.Azmoon1 
Run Code Online (Sandbox Code Playgroud)

我收到这些错误:

'go'附近的不正确语法
'CREATE VIEW'必须是查询批处理中的第一条语句。
超出最大存储过程,函数,触发器或视图嵌套级别(限制32)。

sql t-sql sql-server stored-procedures view

3
推荐指数
1
解决办法
8470
查看次数

DotNet Core,没有为此DbContext配置数据库提供程序

我想使用简单的LINQ命令从我的表"Header"中选择数据,但我遇到了错误.

我的行动

    public HeaderModel GetHeaderInformation()
    {
        using(var context = new ApplicationDbContext())
        {
            var header = context.Headers.Select(x => new HeaderModel
            {
                colorCode = x.colorCode,
                height = x.height,
                Id = x.Id,
                left = x.left,
                top = x.top,
                width = x.width
            }).FirstOrDefault();

            return header;
        }
    }
Run Code Online (Sandbox Code Playgroud)

错误

附加信息:尚未为此DbContext配置数据库提供程序.可以通过覆盖DbContext.OnConfiguring方法或在应用程序服务提供程序上使用AddDbContext来配置提供程序.如果使用AddDbContext,那么还要确保您的DbContext类型在其构造函数中接受DbContextOptions对象,并将其传递给DbContext的基础构造函数.

我的ApplicationDbContext

public class ApplicationDbContext : IdentityDbContext<ApplicationUser> 
{
    public ApplicationDbContext(DbContextOptions<ApplicationDbContext> options)
        : base(options) { }

    public ApplicationDbContext() : base() { }

    public DbSet<Header> Headers { get; set; }
    public DbSet<Menu> Menus { get; set; }
} …
Run Code Online (Sandbox Code Playgroud)

c# linq dbcontext entity-framework-core .net-core

2
推荐指数
1
解决办法
6122
查看次数

如何在 node.js 中以角度使用 socket.io?

客户端我使用 Angular 6,服务器端我使用 node.js。

在 angular 6 控制台中,它会socket.io id({message: "Hello World", id: "6An-ctwlwbZZWrfMAAAB"}) 在使用以下代码后打印消息 。

此代码是正确的或此代码中的任何更改 bcoz 我不确定此代码,请帮助纠正此问题。

另一个问题是我的项目中有超过 15 个组件,所以如何将它socket.io用于所有组件,或者我必须app.component.ts在所有其他组件中导入此代码。

app.js(服务器端)

after installing (npm i socket.io)

const express = require('express');
var app = express();
const http = require('http');
const socketIo = require('socket.io');
const server = http.Server(app);
const io = socketIo(server);

server.listen(3000,function(req,res){
  console.log("listen at 3000!");
});

io.on('connection',(socket) => {
  socket.emit('hello',{
    message : 'Hello World',id: socket.id
  })
});
Run Code Online (Sandbox Code Playgroud)

app.component.ts(客户端)

after installing (npm i socket.io)

import * …
Run Code Online (Sandbox Code Playgroud)

node.js socket.io angular

2
推荐指数
1
解决办法
1万
查看次数

Firebase:未创建 Firebase 应用程序“[DEFAULT]” - 调用 Firebase App.initializeApp() (app/no-app)

首先,我很抱歉,这是我第一次在论坛上提问,我的英语说得不太好...我正在使用 Ionic 3 开发一个应用程序,当我尝试时遇到此错误使用 firebase :

Firebase:未创建 Firebase 应用程序“[DEFAULT]” - 调用 Firebase App.initializeApp() (app/no-app)

这是我的文件:

应用程序模块.ts:

import { BrowserModule } from '@angular/platform-browser';
import { ErrorHandler, NgModule } from '@angular/core';
import { IonicApp, IonicErrorHandler, IonicModule } from 'ionic-angular';
import { SplashScreen } from '@ionic-native/splash-screen';
import { StatusBar } from '@ionic-native/status-bar';

import { AngularFireModule } from 'angularfire2';
import { AngularFireAuthModule } from 'angularfire2/auth';

import { MyApp } from './app.component';
import { HomePage } from '../pages/home/home';
import {TabsPage} from "../pages/tabs/tabs";
import {ListPage} from …
Run Code Online (Sandbox Code Playgroud)

firebase angular

1
推荐指数
1
解决办法
8451
查看次数