【问题标题】:How to create List(material-ui) programatically?如何以编程方式创建 List(material-ui)?
【发布时间】:2016-03-29 07:04:12
【问题描述】:

我尝试使用 Material-UI 中的列表组件创建联系人视图。 代码是用打字稿写的。 我真的不知道如何正确设置 react 和 material-ui。希望有人能指出。

export interface IContact {
    contactName: wx.IObservableProperty<string>;
}

export abstract class Contact implements IContact {
    contactName: wx.IObservableProperty<string>;

    constructor() {
        this.contactName = wx.property<string>();
    }
}

/// <reference path="icontact.ts" />

import {IContact, Contact} from '../models/icontact.ts'

export interface IPersonContact extends IContact {
}

export class PersonContact extends Contact implements IPersonContact {
    constructor() {
        super();
    }
}

/// <reference path="../../../typings/tsd.d.ts" />
/// <reference path="../models/icontact.ts" />
/// <reference path="../models/personcontact.ts" />

'use strict';

import * as React from 'react';
import * as ReactDOM from 'react-dom';
import * as Mui from 'material-ui';
import {IContact} from '../models/icontact.ts'
import * as MuiStyles from 'material-ui/lib/styles';
import {IPersonContact, PersonContact} from '../models/personcontact.ts'

interface ContactViewPros {
}

interface ContactViewState {
}

class ContactView extends React.Component<ContactViewPros, any>{

    itemAddedSubscriber: Rx.IDisposable;
    itemRemovedSubscriber: Rx.IDisposable;

    dataSource: wx.IObservableList<IContact>;
    items: Array<Mui.ListItem>;

    constructor() {       
        super();
        this.state = { muiThem: MuiStyles.ThemeManager.getMuiTheme(MuiStyles.LightRawTheme) };

        this.dataSource = wx.list<IContact>();

        this.itemAddedSubscriber = this.dataSource.itemsAdded.subscribe(changedInfos => this.onContactsAdded(changedInfos));
        this.itemRemovedSubscriber = this.dataSource.itemsRemoved.subscribe(changedInfos => this.onContactRemoved(changedInfos));

        let contact = new PersonContact();
        contact.contactName('adam');
        this.dataSource.add(contact);
    }    

    onContactsAdded(changedInfos: wx.IListChangeInfo<IContact>): void {
        changedInfos.items.forEach(contact => {
            console.log("Contact-list changed");
        });
    }

    onContactRemoved(changedInfos: wx.IListChangeInfo<IContact>): void {
    }

    getInitialState() {
        return this.state;
    }

    componentWillUnmount() {
        this.itemAddedSubscriber.dispose();
        this.itemRemovedSubscriber.dispose();
    }

    renderContactList() {
        this.items = this.dataSource.map<Mui.ListItem>(contact=> {
            var listItem = new Mui.ListItem();
            listItem.props = {
                initiallyOpen: true
            };
            return listItem;
        });
    }

    render() {
        var items = this.renderContactList();
        return <Mui.List>{items}</Mui.List>;
    }
}

export default ContactView;

【问题讨论】:

    标签: typescript material-ui


    【解决方案1】:

    您可能希望创建没有 JSX 语法的组件。您可以通过 React.createElement(Component, { props }, children) 做出反应。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2021-10-11
      • 2016-06-05
      • 2019-07-16
      • 2020-02-09
      • 1970-01-01
      • 2022-01-18
      • 2013-03-10
      相关资源
      最近更新 更多