Есть много способов сделать это, я предполагаю, что вам нужно опросить сервер после определенного интервала и обновить ваш экран, вы можете сделать что-то вроде этого:
Опрос через определенный интервал времени
constructor(props) {
super(props);
this.state = {
tableHead: ['', 'Head1', 'Head2', 'Head3'],
tableTitle: ['Title', 'Title2', 'Title3', 'Title4'],
tableData: [ ],
keepPolling: true
}
componentWillMount()
{
pollAfter(60 * 1000, ()=>{
// get your data from the server here
}).then((response)=>{
// and set state here like this
this.setState({
tableData : response
});
})
}
pollAfter(intervalDuration, fn) {
const asyncTimeout = () => setTimeout(() => {
this.pollAfter(intervalDuration, fn);
}, intervalDuration);
const assignNextInterval = () => {
if (!this.keepPolling) {
this.stopPolling();
return;
}
this.interval = asyncTimeout();
};
Promise.resolve(promise)
.then(assignNextInterval)
.catch(assignNextInterval);
}
Самый элегантный способ сделать это заключается в использовании неявных геттеров и сеттеров:
class InnerClass
{
public int a{ get; set; }
public int b{ get; set; }
}
class OuterClass
{
public InnerClass innerClass{ get; set; }
}
Это неявно то же самое, что:
class InnerClass
{
private int _a;
public int a
{
get
{
return _a;
}
set
{
_a = value;
}
}
private int _b;
public int b
{
get
{
return _b;
}
set
{
_b = value;
}
}
}
class OuterClass
{
private InnerClass _innerClass;
public InnerClass innerClass
{
get
{
return _innerClass;
}
set
{
_innerClass = value;
}
}
}
Эти два определения неявно одинаковы - за исключением нескольких нажатий клавиш. В первом примере компилятор за кулисами реализует необходимые частные поля, поэтому вам не нужно. Однако второй дает вам больше контроля над происходящим.
Синтаксис ничем не отличается. Просто ...
public InnerClass InnerClass
{
get { return innerClass; }
set { innerClass = value; }
}
Кстати, если вы используете C # в .NET 3.5, вы можете использовать функцию автоматического создания свойств, если все, что у вас есть, - это простое свойство, которое просто читает и записывает в резервное хранилище (как вы есть выше). Sytax аналогичен абстрактному свойству:
public InnerClass InnerClass { get; set; }
Он автоматически генерирует частный член для хранения, затем считывает его в get
и записывает в него в наборе
.
public InnerClass InnerClass
{
get
{
return innerClass;
}
set
{
innerClass = value;
}
}
Это зависит от того, как должен работать внутренний класс. Внешнему классу может потребоваться «владеть» внутренним классом, и в этом случае:
public InnerClass InnerClass{
get{ return innerClass; }
set{ innerClass.CopyFrom(value); /* Pseudo method call */ }
}
Поступая таким образом, вы предотвращаете манипулирование экземпляром внешнего кода, кроме случаев, когда явно через OuterClass ..
Если вы имеете в виду доступ к внутренним членам класса без раскрытия самого внутреннего класса, вы можете использовать следующий код. Если вы просто хотите открыть this.innerClass
, нет никакой разницы в том, как вы открываете поля InnerClass
.
class OuterClass
{
private InnerClass innerClass
public int M_A
{
get
{
if (this.innerClass != null)
{
return this.innerClass.M_A;
}
else
{
throw new InvalidOperationException();
}
}
set
{
if (this.innerClass != null)
{
this.innerClass.M_A = value;
}
else
{
throw new InvalidOperationException();
}
}
}
}