Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/reactjs/26.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 无法读取属性';追加儿童';零位微滑块的响应_Javascript_Reactjs_Spfx - Fatal编程技术网

Javascript 无法读取属性';追加儿童';零位微滑块的响应

Javascript 无法读取属性';追加儿童';零位微滑块的响应,javascript,reactjs,spfx,Javascript,Reactjs,Spfx,新手,我的TinySlider组件有问题。每次我在UI中更新旋转木马中可以显示的帖子数量时,我每隔一次更新都会收到此错误,我需要修复此错误: 未捕获(承诺中)TypeError:无法读取null的属性“appendChild” 如果删除,则不会出现此错误 我已经尝试过:{renderProfilesCarousel?renderProfilesCarousel:'}内部的,但这不起作用 你知道我能在这里做什么吗?这件事现在很棘手 // React import * as React from '

新手,我的TinySlider组件有问题。每次我在UI中更新旋转木马中可以显示的帖子数量时,我每隔一次更新都会收到此错误,我需要修复此错误:

未捕获(承诺中)TypeError:无法读取null的属性“appendChild” 如果删除
,则不会出现此错误

我已经尝试过:
{renderProfilesCarousel?renderProfilesCarousel:'}
内部的
,但这不起作用

你知道我能在这里做什么吗?这件事现在很棘手

// React
import * as React from 'react';
// Styling
import styles from './LinkedIn.module.scss';
// Importing the props
import { ILinkedInProps } from './ILinkedInProps';
// Importing the state
import { ILinkedInState } from './ILinkedInState';
// Removes special characters 
import { escape } from '@microsoft/sp-lodash-subset';
// Library for making http requests
import axios from 'axios';
// Library for creating unique ids
import shortid from 'shortid';
// Fabric UI elements
import {
  DocumentCard,
  DocumentCardPreview,
  DocumentCardType,
  DocumentCardDetails,
  DocumentCardTitle,
  IDocumentCardPreviewProps
} from 'office-ui-fabric-react/lib/DocumentCard';
import { ImageFit, Image } from 'office-ui-fabric-react/lib/Image';
// Sort array
import sortBy from 'sort-array';
import TinySlider from "tiny-slider-react";
import { SPComponentLoader } from '@microsoft/sp-loader';
import "./styles.scss";

// LinkedIn Component Class
export default class LinkedIn extends React.Component<ILinkedInProps, ILinkedInState> {

  // State needed for the component
  constructor(props) {
    super(props);
    this.state = {
        profiles: [],
        isLoading: true,
        errors: null
    };
    SPComponentLoader.loadCss('//cdnjs.cloudflare.com/ajax/libs/tiny-slider/2.9.2/tiny-slider.css');
  }

  // This function runs when component is first renderd
  public componentDidMount() {
    this.getProfiles();
  }

  // This function runs when props that have changed have been passed in
  public componentDidUpdate(prevProps) {
    if ( prevProps.listName !== this.props.listName || prevProps.postCount ! == this.props.postCount )
    {
      this.renderProfile();
    }
  }

  // Grabs LinkedIn profiles - This service runs once a day
  private getProfiles() {
    let companyNameCreate: string;
    let backUpImageCreate: string;
    axios
      .get(
        "https://cors-anywhere-spfx.herokuapp.com/" +
        "https://cache1.phantombooster.com/YRrbtT9qhg0/KJhwG7zo0zPE5zc9Eehn6Q/result.json"
      )
      .then(response => {
      this.setState({
        profiles: response.data.filter(d => d.postContent).map(post => {
          if (post.profileUrl == 'https://www.linkedin.com/company/')
          {
            companyNameCreate = 'company';
            backUpImageCreate = 'https://media-exp2.licdn.com/dms/image/C4D0BAQEbfV4VNvsJyg/company-logo_100_100/0?e=1587600000&v=beta&t=CX_s-ekYNn0TnXANeftQkLZ9jIvMW7PtDTLLcHcu9wY'
          }
          else if (post.profileUrl == 'https://www.linkedin.com/company/1')
          {
            companyNameCreate = 'company';
            backUpImageCreate = 'https://media-exp2.licdn.com/dms/image/C4D0BAQG_Pr1cDaGfdA/company-logo_200_200/0?e=1587600000&v=beta&t=C0fWkjbO2Elth8K4pG4i_kzwlu8dvQvN1Ws-yKGxxP4'
          }
          else if (post.profileUrl == 'https://www.linkedin.com/company/2')
          {
            companyNameCreate = 'company';
            backUpImageCreate = 'https://media-exp2.licdn.com/dms/image/C4D0BAQHdub-mnNwSNg/company-logo_100_100/0?e=1587600000&v=beta&t=druqo_O5gB5cExttREUlSdGnJhr4Wx2-PCjshJ0K0fI'
          }
          else if (post.profileUrl == 'https://www.linkedin.com/company/3')
          {
            companyNameCreate = 'company';
            backUpImageCreate = 'https://media-exp2.licdn.com/dms/image/C4D0BAQEUKGn5i1EnQA/company-logo_100_100/0?e=1587600000&v=beta&t=uwE3CUaodiqmW2K3a3Hm57QDIDlMvrmfmoHDvlGnzuY'
          }
          else if (post.profileUrl =='https://www.linkedin.com/company/4')
          {
            companyNameCreate = 'company';
            backUpImageCreate = 'https://media-exp2.licdn.com/dms/image/C4D0BAQGYqqxF43Rfdg/company-logo_200_200/0?e=1587600000&v=beta&t=4hmLzdbkjk_hL3rwonWgTbUF1V-itkyBEfLBh85G7_k'
          }
          else if (post.profileUrl == 'https://www.linkedin.com/company/5')
          {
            companyNameCreate = 'company';
            backUpImageCreate = 'https://media-exp2.licdn.com/dms/image/C4E0BAQHsNKLawvW7zg/company-logo_100_100/0?e=1587600000&v=beta&t=26Otro4T3q90GznPxXX6n3oPTYYWIgzodOIask0enu4'
          }
          return {
            ...post,
            companyName: companyNameCreate,
            backUpImage:  backUpImageCreate
          }
        })
      });
    })
    // Error catching
    .catch(errors => this.setState({ errors, isLoading: false }));
  }

  // Creates the renderd layout of the LinkedIn profile
  private async renderProfile() {
    let filter: string = '';
    // Works out which profile to display
    switch (this.props.listName) {
      case "abfi":
        filter = 'https://www.linkedin.com/company/1';
        break;
      case 'abEnzymes':
        filter = 'https://www.linkedin.com/company/2';
        break;
      case 'abitec':
        filter = 'https://www.linkedin.com/company/3';
        break;
      case 'ohly':
        filter = 'https://www.linkedin.com/company/4';
        break; 
      case 'pgpi':
        filter = 'https://www.linkedin.com/company/5';
        break;
      case 'spiPharma':
        filter = 'https://www.linkedin.com/company/6';
        break;
      case 'all': 
        filter = 'Post';
        break;
      default:
        filter = 'https://www.linkedin.com/company/1';
        return filter;
    }

    // Grabs the array of objects
    let { profiles } = this.state;

    const slotOrder = [
      "", "1h","2h","3h","4h","5h","6h","7h","8h","9h","10h","11h","12h", "13h","14h","15h","16h","17h","18h","19h","20h","21h","22h", "23h", "2d", "3d", "4d", "5d", "6d", "1w", "2w", "3w", "1mo", "2mo", "3mo", "4mo", "5mo", "6mo", "7mo", "8mo", "9mo", "10mo", "11mo", "1yr", "2yr"
    ];

    // Select only the needed objects from the array
    let selectedProfile;

    // Display all posts 
    if (this.props.listName !== 'all') {
      selectedProfile = profiles.filter(profile => profile.profileUrl == filter);
    } else {
      selectedProfile = profiles.filter(profile => profile.action == filter);
    }

    selectedProfile = sortBy(selectedProfile, "postDate", { postDate: slotOrder })
    selectedProfile = selectedProfile.splice(0, this.props.postCount)

    // Renders the selected profile
    let renderProfilesCarousel = selectedProfile.map(profile => {

      // If LinkedIn post has no image, then add a fallback!
      if (profile.imgUrl == "" || profile.imgUrl == null ) {
        profile.imgUrl = profile.backUpImage;
      }

      // Removes hashtag line from posts
      profile.postContent = profile.postContent.replace(/hashtag/g, '');

      return(
        <div className={styles.linkedInContainerCarousel} style={{ position: "relative" }} key={shortid.generate()}>
          <a href={profile.postUrl} target="_blank" data-interception="off"> 
              <DocumentCard
                aria-label={profile.postContent}
                className={styles.linkedInDocCard}
              > 
                { profile.imgUrl && 
                  <Image
                    src={profile.imgUrl}
                    imageFit={ImageFit.cover}
                    height={168}
                  />
                }
                <DocumentCardTitle
                  title={profile.postContent}
                  shouldTruncate={true}
                />
                <p className={ styles.linkedInCompany}>{profile.companyName}</p>
                <p className={ styles.linkedInLikes}>{`Likes: ${profile.likeCount}`}</p>
              </DocumentCard>
          </a>
        </div>
      )
    });

    // Renders the selected profile
    let renderProfiles = selectedProfile.map(profile => {

      // If LinkedIn post has no image, then add a fallback!
      if (profile.imgUrl == "" || profile.imgUrl == null ) {
        profile.imgUrl = profile.backUpImage;
      }

      let previewProps: IDocumentCardPreviewProps = {
        previewImages: [
          {
            name: profile.postContent,
            previewImageSrc: profile.imgUrl,
            iconSrc: null,
            imageFit: ImageFit.cover,
            height: 110,
            width: 110
          }
        ]
      };

      return(
        <div className={styles.linkedInContainer} style={{ position: "relative" }} key={shortid.generate()}>
          <a href={profile.postUrl} target="_blank" data-interception="off"> 
              <DocumentCard
                aria-label={profile.postContent}
                className={styles.linkedInDocCard}
                type={DocumentCardType.compact}
              > 
                { profile.imgUrl && 
                  <DocumentCardPreview {...previewProps} />
                }
                <DocumentCardDetails>
                <DocumentCardTitle
                  title={profile.postContent}
                  shouldTruncate={true}
                />
                  <p className={ styles.linkedInCompany}>{profile.companyName}</p>
                  <p className={ styles.linkedInLikes}>{`Likes: ${profile.likeCount}`}</p>
                </DocumentCardDetails>
              </DocumentCard>
          </a>
        </div>
      )
    });

    let settings: any;

    if (this.props.toggleInfoHeaderValue == true )
    {
      settings = {
        lazyload: true,
        nav: false,
        mouseDrag: false,
        items: 1,
        swipeAngle: false,
        speed: 400,
        autoplay: false,
        axis: "horizontal",
        autoHeight: false,
        rewind: true,
        fixedWidth: false
      };
    }
    else
    {
      settings = {
        lazyload: true,
        nav: false,
        mouseDrag: false,
        items: 3,
        swipeAngle: false,
        speed: 400,
        autoplay: false,
        axis: "vertical",
        autoHeight: false,
        rewind: true,
        fixedWidth: false
      };
    };

    if (this.props.toggleInfoScrollValue) {
      settings.autoplay = true;
    } else {
      settings.autoplay = false;
    }

    if (this.props.toggleInfoHeaderValue == true ) {
      return(
        <div>
            <TinySlider settings={settings}>
               {renderProfilesCarousel}
            </TinySlider>
        </div>
      )
    } else {
      return (

        <div className={styles.upArrows}>
            <TinySlider settings={settings}>
               {renderProfiles}
            </TinySlider>
        </div>
      )
    }   

  } 

  // Renders to the browser
  public render(): React.ReactElement<ILinkedInProps> {

    return (
      <div className={ styles.linkedIn }>
        <div className={ styles.container }>
          <p className={ styles.title }>{escape(this.props.description)}</p>
          <div>
            { this.renderProfile() }
          </div>
        </div>
      </div>
    );
  }
} 
//反应
从“React”导入*作为React;
//造型
从“./LinkedIn.module.scss”导入样式;
//导入道具
从“/ILinkedInProps”导入{ILinkedInProps};
//输入国家
从“/ILinkedInState”导入{ILinkedInState};
//删除特殊字符
从'@microsoft/sp lodash subset'导入{escape};
//用于发出http请求的库
从“axios”导入axios;
//用于创建唯一ID的库
从“shortid”导入shortid;
//结构UI元素
进口{
文件卡,
文档卡预览,
文档卡片类型,
文档和详细信息,
文件名称,
IDocumentCardPreviewProps
}来自“office ui fabric react/lib/DocumentCard”;
从“officeui/lib/Image”导入{ImageFit,Image};
//排序数组
从“排序数组”导入排序;
从“小滑块”中导入TinySlider;
从'@microsoft/sp loader'导入{SPComponentLoader};
导入“/styles.scss”;
//LinkedIn组件类
导出默认类LinkedIn扩展React.Component{
//组件所需的状态
建造师(道具){
超级(道具);
此.state={
简介:[],
孤岛加载:是的,
错误:null
};
SPComponentLoader.loadCss('//cdnjs.cloudflare.com/ajax/libs/tiny slider/2.9.2/tiny slider.css');
}
//此函数在第一次渲染组件时运行
公共组件didmount(){
这是getProfiles();
}
//此函数在传入已更改的道具时运行
公共组件更新(prevProps){
if(prevProps.listName!==this.props.listName | | prevProps.postCount!==this.props.postCount)
{
这个.renderProfile();
}
}
//获取LinkedIn个人资料-此服务每天运行一次
私有getProfiles(){
让CompanyName创建:字符串;
让backUpImageCreate:string;
axios
.得到(
"https://cors-anywhere-spfx.herokuapp.com/" +
"https://cache1.phantombooster.com/YRrbtT9qhg0/KJhwG7zo0zPE5zc9Eehn6Q/result.json"
)
。然后(响应=>{
这是我的国家({
配置文件:response.data.filter(d=>d.postContent.map(post=>{
如果(post.profileUrl=='https://www.linkedin.com/company/')
{
companyNameCreate='company';
backUpImageCreatehttps://media-exp2.licdn.com/dms/image/C4D0BAQEbfV4VNvsJyg/company-logo_100_100/0?e=1587600000&v=beta&t=CX_s-Ekynnn0tnxaneftqklz9jivmw7ptdtllchcu9wy'
}
else if(post.profileUrl=='https://www.linkedin.com/company/1')
{
companyNameCreate='company';
backUpImageCreatehttps://media-exp2.licdn.com/dms/image/C4D0BAQG_Pr1cDaGfdA/company-logo_200_200/0?e=1587600000&v=beta&t=C0fWkjbO2Elth8K4pG4i_kzwlu8dvQvN1Ws-yKGxxP4'
}
else if(post.profileUrl=='https://www.linkedin.com/company/2')
{
companyNameCreate='company';
backUpImageCreatehttps://media-exp2.licdn.com/dms/image/C4D0BAQHdub-mnNwSNg/company-logo_100_100/0?e=1587600000&v=beta&t=druqo_O5gB5cExttREUlSdGnJhr4Wx2-PCjshJ0K0fI'
}
else if(post.profileUrl=='https://www.linkedin.com/company/3')
{
companyNameCreate='company';
backUpImageCreatehttps://media-exp2.licdn.com/dms/image/C4D0BAQEUKGn5i1EnQA/company-logo_100_100/0?e=1587600000&v=beta&t=uwE3CUaodiqmW2K3a3Hm57QDIDlMvrmfmoHDvlGnzuY'
}
else if(post.profileUrl=='https://www.linkedin.com/company/4')
{
companyNameCreate='company';
backUpImageCreatehttps://media-exp2.licdn.com/dms/image/C4D0BAQGYqqxF43Rfdg/company-logo_200_200/0?e=1587600000&v=beta&t=4hmLzdbkjk_hL3rwonWgTbUF1V-itkyBEfLBh85G7_k'
}
else if(post.profileUrl=='https://www.linkedin.com/company/5')
{
companyNameCreate='company';
backUpImageCreatehttps://media-exp2.licdn.com/dms/image/C4E0BAQHsNKLawvW7zg/company-logo_100_100/0?e=1587600000&v=beta&t=26Otro4T3q90GznPxXX6n3oPTYYWIgzodOIask0enu4'
}
返回{
邮递
公司名称:公司名称创建,
backUpImage:backUpImageCreate
}
})
});
})
//错误捕获
.catch(errors=>this.setState({errors,isLoading:false}));
}
//创建LinkedIn配置文件的渲染器布局
私有异步renderProfile(){
let过滤器:字符串=“”;
//确定要显示的配置文件
开关(this.props.listName){
案例“abfi”:
过滤器https://www.linkedin.com/company/1';
打破
“辅酶”一案:
过滤器https://www.linkedin.com/company/2';
打破
“阿比泰克”案:
过滤器https://www.linkedin.com/company/3';
打破
案例“ohly”:
过滤器https://www.linkedin.com/company/4';
打破
案例“pgpi”:
过滤器https://www.linkedin.com/company/5';
打破
案例“spiPharma”:
过滤器https://www.linkedin.com/company/6';
打破
“全部”案例:
过滤器='Post';
打破
违约:
过滤器https://www.linkedin.com/company/1';
回流过滤器;
}
//获取对象数组
设{profiles}=this.state;
常数slotOrder=[
“,”1h“,”2h“,”3h“,”4h“,”5h“,”6h“,”7h“,”8h“,”9h“,”10h“,”11h“,”12
{ renderProfilesCarousel ? renderProfilesCarousel : <span></span> }
settings?: any;
renderProfiles?: JSX.Element[];

        /* if (this.props.toggleInfoHeaderValue == true) {
            return (
                <div>
                    <TinySlider settings={settings}>
                        {renderProfilesCarousel}
                    </TinySlider>
                </div>
            )
        } else {
            return (

                <div /* className={styles.upArrows} >
                    <TinySlider settings={settings}>
                        {renderProfiles}
                    </TinySlider>
                </div>
            )
        } */
        console.log(renderProfiles.length);
        this.setState({
            settings: settings,
            renderProfiles: renderProfiles,
            isLoading: false
        })
    // Renders to the browser
    public render(): React.ReactElement<ILinkedInProfilesProps> {
        const {settings, renderProfiles} = this.state;
        const theRenderProfileJsxElement: JSX.Element = 
            <div /* className={styles.upArrows} */>
                <TinySlider settings={settings}>
                    {renderProfiles}
                </TinySlider>
            </div>;
        return (
            <div /* className={styles.linkedIn} */>
                <div /* className={styles.container} */>
                    <p /* className={styles.title} */>{escape(this.props.description)}</p>
                    <div>
                        {this.state.isLoading === false &&
                            theRenderProfileJsxElement
                        }
                    </div>
                </div>
            </div>
        );
    }